汉诺塔,相信大家已经不再陌生。我觉得也可能是很多人比较迷茫的问题。今天,不知道怎么突然灵光一现,把这个困扰我好久的问题给解决了。分享给大家,希望有所帮助。
至于问题背景,这里再大致介绍一下,如图:
将一系列木块,从A移动到C,可以借助B,当然,木块的秩序不能改变,即小的木块一定要放在大的木块上面。现在要怎么做呢?
/** n 移动的木块个数 a,b,c 中介木板 */ hanoi(n,a,b,c) 1 if n==1 then 2 move(a,c) 3 else 4 hanoi(n-1,a,c,b) 5 move(a,c) 6 hanoi(n-1,b,a,c)
具体分析如下:
#include<stdio.h> void move(char x,char y) { printf("%c-->%c\n",x,y); } void Hanoi(int n,char a,char b,char c) { if(n==1) move(a,c); else { Hanoi(n-1,a,c,b); move(a,c); Hanoi(n-1,b,a,c); } } int main() { int N; printf("请输入要移动的木块数:"); scanf("%d",&N); Hanoi(N,‘A‘,‘B‘,‘C‘); return 0; }
经过这样的一点小小改动之后,程序就能将每一步如何移动显示出来了,也就达到了跟踪观察的目的。当然,如果有兴趣的话,不妨自己手动追踪一下,肯定会有不一样的感受;
原文:http://www.cnblogs.com/wujiyang/p/3806342.html