关闭

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

标签: 递归c
559人阅读 评论(0) 收藏 举报
分类:

//汉诺塔
#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;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:30646次
    • 积分:786
    • 等级:
    • 排名:千里之外
    • 原创:42篇
    • 转载:40篇
    • 译文:0篇
    • 评论:5条
    最新评论