【wikioi 3145】汉诺塔游戏C代码

来源:互联网 发布:淘宝抠图教程 编辑:程序博客网 时间:2024/05/21 21:41

//汉诺塔
#include<stdio.h>
#include<stdlib.h>

void work(int n,int s,int t)  //参数如上面所说
{
     char x='A'+s-1;   //方便输出字母
     char y='A'+t-1;
     if(n == 1)   //结束条件
     {
         printf("%d from %c to %c\n",n,x,y);
         return ;
     }
 
     int v=6-s-t;//即非起点与终点的塔
     work(n-1,s,v);   //递归结构  向缓冲区挪动
     printf("%d from %c to %c\n",n,x,y);
     work(n-1,v,t);    //缓冲区挪回
}

/*  ……

    将最大的盘挪到终点->倒数第二及前面挪到缓冲区,以此类推

    ……

  

*/


int main(void)
{
  int i,j;
  int x,y;
  int sum=1;
  int n;

  scanf("%d",&n);
  for(i=1;i<=n;i++)
  {
    sum=sum<<1;
  }
  sum--;//2的n次方-1
  printf("%d\n",sum);
 
  work(n,1,3);//A 为1,B 为2,C为3
  
  return 0;
}

原创粉丝点击