汉诺塔问题

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;

}
上一篇下一篇

猜你喜欢

热点阅读