汉诺塔问题
2019-01-02 本文已影响0人
0x55aa
image.png
思路是:
当a只有一个元素时,直接把a 移动到c。
当a有2个元素时 ,先把第一个移动到b,再把第二个移动到c再把第一个从b移动到c。
当a有64个元素时,底64个等第63个移动到b,自己最后再移动到c(这一步就是当a元素只有一块时的情况)
第63个等第62个先移动到b,自己最后移动到c,然后再把b上的所有移动到c
第63个等第62个……
到了第二个就特殊了,第二个不再是等第一个从a移动到b,当发现a是1时,可以直接从a移动到c,所以第二个等第一个移动之后,自己再移动到b,再把c移动到b,这个时候 第三个就等待完毕了,第三个从a移动到c……
b永远是临时杆
#include <iostream>
#include <stack>
using namespace std;
void hanNoi(int n, char a, char b, char c) {
if (n == 1) {
cout << n << " form " << a << " to " << c << endl;
}
else {
hanNoi(n - 1, a, c, b);
cout << n << " from " << a << " to " << c << endl;
hanNoi(n - 1, b, a, c);
}
}
int main() {
hanNoi(10, 'a', 'b', 'c');
system("pause");
return 0;
}