## 汉诺塔问题相传来源于印度教的天神汉诺。据说汉诺在创造地球时建了一座神庙,神庙里面有三根柱子,汉诺将64个直径大小不同的盘子按照从大到小的顺序依次放置在第一个柱子上,形成金塔(即汉诺塔)。天神汉诺每天让庙里的僧侣们将第一根柱子上的64个盘子借助第二根柱子全部移动大第三根柱子上,并说:“当这64个盘子全部移动到第三根柱子上时,世界末日也就要到了!”这就是著名的汉诺塔问题。
#include<stdio.h> #include<math.h> void move(char X, char Y) { printf("%c->%c\n",X,Y); } int hanoi(int n,char x,char y,char z) { if(n==1) move(x,z); else { hanoi(n-1,x,z,y); move(x,z); hanoi(n-1,y,x,z); } return 0; } int main(void) { int i,t; char a,b,c; printf("请输入a柱上汉诺塔的盘子个数:"); scanf("%d",&i); printf("汉诺塔盘的运行路径:\n"); hanoi(i,'a','b','c'); t=pow(2,i)-1; printf("\n运行路径总数为:%d\n",t); return 0; }
程序解析:
输入i=4:
输出路径:
输出路径总数: