每天一算法(河内之塔),想起来就复习了下下

2014-11-24 08:58:20 · 作者: · 浏览: 0

如果柱子标为ABC,要由A搬至C,在只有一个盘子时,就将它直接搬至C,当有两个盘子,就将B当作辅助柱。如果盘数超过2个,将第三个以下的盘子遮起来,就很简单了,每次处理两个盘子,也就是:A->B、A ->C、B->C这三个步骤,而被遮住的部份,其实就是进入程式的递回处理。事实上,若有n个盘子,则移动完毕所需之次数为2^n - 1。


#include
#include
#include
using namespace std;
// 使用RAND_MAX

void hanni(int n,char A,char B,char C)
{
if (n <0)
{
cout<<"n<0"< exit(0);
}
else
{
if (1 == n)
{
printf("从%c移动%d个到%c",A,n,C);
cout< }
else
{
hanni(n-1,A,C,B);
hanni(1,A,B,C);
hanni(n-1,B,A,C);
}
}
};
int main(){
char A = 'a';
char B = 'b';
char C = 'c';
hanni(3,A,B,C);
return 0;
}