美文网首页
汉诺塔问题

汉诺塔问题

作者: 0x55aa | 来源:发表于2019-01-02 19:55 被阅读0次
    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;
    
    }
    

    相关文章

      网友评论

          本文标题:汉诺塔问题

          本文链接:https://www.haomeiwen.com/subject/lhstrqtx.html