问题描述:在河塔问题上的进阶,双色,让其两个颜色分开,并且满足,从上到下,从小到大,废话不多说,直接上图
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include<iostream>
using namespace std;
void hao(int d, char a, char b, char c) {
//如果等于1;第一步转移,把s上的全转到a上,再然后把a看成s,s看成a那么就可以回到上一种情形;
if (d == 1) {
cout << "移动从" << a << "到" << c << endl;
cout << "移动从" <<a << "到" <<c << endl;
}//
else {
//使用单色移动方法,除倒数一层,其他全部移动到C柱;不断递归,
hao(d - 1,a, c, b);
hao(1, a,b, c);
hao(d - 1,b, a, c);
}
}
void hao1(int d) {
char a = 'A';
char b = 'B';
char c = 'C';
int i;
for (i = d / 2; i > 1; i--) {
hao(i - 1, a, b, c);
cout << "移动从" << a << "到" <<b << endl;
cout << "移动从" <<a << "到" <<b << endl;
//将C柱视为A柱,进行移动,实则就是c移动到A.
hao(i - 1, c,b, a);
//对B进行分色;
cout << "移动从" <<b << "到" << c << endl;
}
//每一个 最后步骤都一样
cout << "移动从" << a << "到" << b << endl;
cout << "移动从" <<a << "到" << c << endl;
}
int main() {
int n;
cout << "请输入盘数:";
cin >> n;
hao1(n);
system("pause");
return 0;
}