#include<iostream>
using namespace std;
void show(int arr[10][3]);
void hanno(int num, char a, char b, char c);
void move(char x, char y);
int arr[10][3] = { 0 };
void move(char x, char y)
{
int m = x - 65;
int n = y - 65;
int imove = 0;
for (size_t i = 0; i < 10; i++)
{
if (arr[i][m] != 0)
{
imove = i;
break;
}
}
//arr[imove][m]
int jmove = 0;
if (arr[9][n] == 0)
{
jmove = 9;
}
else
{
jmove = 10;
for (int i = 0; i < 10; i++)
{
if (arr[i][n] != 0)
{
jmove = i;
break;
}
}
jmove -= 1;
}
//交换数据
int temp = arr[imove][m];
arr[imove][m] = arr[jmove][n];
arr[jmove][n] = temp;
}
void hanno(int num, char a, char b, char c)
{
if (num==1)
{
cout << a << "-->" << c << endl;
move(a, c);
show(arr);
}
else
{
hanno(num - 1, a, c, b);
cout << a << "-->" << c << endl;
move(a, c);
show(arr);
hanno(num - 1, b, a, c);
}
}
//展示
void show(int arr[10][3])
{
cout << "A\tB\tC\t" << endl;
for (size_t i = 0; i < 10; i++)
{
for (size_t j = 0; j < 3; j++)
{
cout << arr[i][j]<<"\t";
}
cout << endl;
}
cout << endl;
}
int main(int argc, char *argv[])
{
//初始化
int num = 0;
cin >> num;
for (size_t i = 0; i <num; i++)
{
arr[10 - i - 1][0] = num - i;
}
show(arr);
hanno(num, 'A', 'B', 'C');
system("pause");
}
c++汉诺塔实现
最新推荐文章于 2022-12-03 13:51:43 发布