|
发表于 2013-7-16 19:33:34
|
显示全部楼层
看看我写的吧,
思路就是把所有盘子从A移到B,
假设有n个盘子,则先把n-1个盘子从A移到C,再把一个盘子从A移到B,再把n-1个盘子从C移到B,
至于n-1个盘子怎么移?
就用递归函数,相当于第一次的n,
具体看看代码吧,应该能懂
#include<iostream>
using namespace std;
void move(char a,char b)
{
cout<<a<<"->"<<b<<endl;
}
void hanoi(int j,char a,char b) //把j个盘子从a移到b
{
if(j==1)
move(a,b);
else
{
char c;
if(a=='A'&&b=='B')
c='C';
else if(a=='A'&&b=='C')
c='B';
else if(a=='B'&&b=='C')
c='A';
else if(a=='B'&&b=='A')
c='C';
else if(a=='C'&&b=='A')
c='B';
else if(a=='C'&&b=='B')
c='A';
hanoi(j-1,a,c);
move(a,b);
hanoi(j-1,c,b);
}
}
int main()
{
int n;
while(1)
{
cout<<"请输入盘子的个数:"<<endl;
cin>>n;
if(n==0)
break;
cout<<"移动的方法为:"<<endl;
hanoi(n,'A','B');
}
return 0;
} |
|