汉诺塔 问题C/C++代码师范

/*
*有A、B、C三座塔,其中A塔上有从小到大的编号从1到n依次累加的n个塔,
*要求将A上的n个塔移动到C上,移动中不能把号码大的塔放在号码小的塔上面*  
*/




#include <iostream>
using namespace std;


int m =0; //全局变量记录移动次数


int move (char A, int No, char C)
{
    cout<<++m<<":  "<<"move "<<No<<" from "<<A<<" to "<<C<<";"<<endl; //将No号塔从A移动到C;
return 0;
}




int Hanoi(int n, char A, char B,char C)//将 n个盘子从A街道B移动到C;
{
    if(0==n)
{
   cout<<"The Number of Plates is "<<n<<endl;
return 0;
}
else if(1==n)
{
   move(A,1,C);
return 0;
}
else
{
   Hanoi(n-1,A,C,B);
move(A,n,C);//将n号塔直接从A移动到C
Hanoi(n-1,B,A,C);
}
}




int main(void)
{
    char A, B, C;
A='A';
B='B';
C='C';
Hanoi(4,  A, B, C);

cout<<"Main is over!"<<endl;
return 0;
}

猜你喜欢

转载自blog.csdn.net/shayne_lee/article/details/76377046