生息之地

随便写写

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

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

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012837895/article/details/17081093
文章标签: 递归 c
个人分类: OJ
想对作者说点什么? 我来说一句

C语言汉诺塔游戏代码

2013年07月11日 291B 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭