每天一算法(河内之塔),想起来就复习了下下
如果柱子标为ABC,要由A搬至C,在只有一个盘子时,就将它直接搬至C,当有两个盘子,就将B当作辅助柱。如果盘数超过2个,将第三个以下的盘子遮起来,就很简单了,每次处理两个盘子,也就是:A->B、A ->C、B->C这三个步骤,而被遮住的部份,其实就是进入程式的递回处理。事实上,若有n个盘子,则移动完毕所需之次数为2^n - 1。
#include <iostream>
#include <cmath>
#include <ctime>
using namespace std;
// 使用RAND_MAX
void hanni(int n,char A,char B,char C)
{
if (n <0)
{
cout<<"n<0"<<endl;
exit(0);
}
else
{
if (1 == n)
{
printf("从%c移动%d个到%c",A,n,C);
cout<<endl;
}
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;
}
补充:软件开发 , C++ ,