实验原理
与纯汉诺塔问题相同
实验步骤
经过奇偶异同分析可知。当出发柱子A为奇数个盘子 时;最上与最下层颜色为红色,过渡柱子C有偶数个盘子,且最 底层为蓝色:最上层位红色,目标B柱子最底层为红色.A柱子 最上层颜色为奇数一(奇数+偶数)=偶数一蓝色,过渡柱子C上 的偶数个盘子.移动时就变成出发柱子,A柱变成过渡柱子且 叠加的第一个盘子为红色,目标柱子叠加的是蓝色。以此类 推。不会出现同色叠加。 同理,当出发柱子A为偶数个盘子时,最上层为红色、最底 。层为蓝色,过度柱子C有奇数个盘子,且最上、最底层为红色,目 标B柱子最底层为蓝色。A柱子最上层颜色为偶数一(奇数+奇数) =偶数一蓝色.过渡柱子C上的奇数个盘子,移动时就变成出发 柱子.A柱变成过度柱子且叠加的第一个盘子为蓝色.目标柱子 叠加的是红色。以此类推.同样不会出现同色叠加的情况。
关键代码
void move(int a,int b){
out<<"塔"<<a<<"到塔"<<b<<endl;
}
void hanoi(int n,int a,int b,int c){
if(n>0){
hanoi(n-1,a,c,b);
out<<"将第"<<n<<"盘从";
move(a,b);
hanoi(n-1,c,b,a);
}
}
int main()
{
ifstream in;
in.open("input004.txt");
out.open("output004.txt");
int n;
in>>n;
hanoi(n,1,2,3);
return 0;
}
完整代码
#include<iostream>
#include<fstream>
using namespace std;
ofstream out;
void move(int a,int b){
out<<"塔"<<a<<"到塔"<<b<<endl;
}
void hanoi(int n,int a,int b,int c){
if(n>0){
hanoi(n-1,a,c,b);
out<<"将第"<<n<<"盘从";
move(a,b);
hanoi(n-1,c,b,a);
}
}
int main()
{
ifstream in;
in.open("input004.txt");
out.open("output004.txt");
int n;
in>>n;
hanoi(n,1,2,3);
return 0;
}
来源:CSDN
作者:HNU君陌
链接:https://blog.csdn.net/qq_40851744/article/details/104145728