#include <iostream>
#include <vector>
using namespace std;
typedef int layer;
typedef vector<int> Tower;
void show(Tower);
void Move(layer n, Tower& a, Tower& b)
{
int temp;
while (n>0)
{
temp = a.back();
a.pop_back();
b.push_back(temp);
n--;
}
}
void HanNuoTower(layer n, Tower& a, Tower& b, Tower& c)
{
if (n <= 1)
{
Move(1, a, b);
}
else
{
HanNuoTower(n - 1, a, c, b);//把上面n-1层从a移动到c;
Move(1, a, b);//把剩下的层从a移动到c;
HanNuoTower(n - 1, c, b, a);//把c上面n-1层移动到b;
}
}
void show(Tower a)
{
if (a.size() == 0)
cout << "NULL";
for (Tower::iterator i = a.begin(); i != a.end(); i++)
cout << *i<<" ";
cout << endl;
}
int main()
{
Tower a, b, c;
for (int i = 5; i >= 0; i--)
a.push_back(i);
cout << "当前a塔:";
show(a);
cout << "当前b塔:";
show(b);
cout << "当前c塔:";
show(c);
HanNuoTower(a.size(), a, b, c);
cout << "移动后a塔:";
show(a);
cout << "移动后b塔:";
show(b);
cout << "移动后c塔:";
show(c);
return 0;
}
汉诺塔问题解决代码
最新推荐文章于 2023-07-07 21:56:50 发布