c++漢諾塔問題


c++解決漢諾塔問題

題目描述

約19世紀末,在歐州的商店中出售一種智力玩具,在一塊銅板上有三根桿,最左邊的桿上自上而下、由小到大順序串着由64個圓盤構成的塔。目的是將最左邊桿上的盤全部移到中間的桿上,條件是一次只能移動一個盤,且不允許大盤放在小盤的上面。

這是一個著名的問題,幾乎所有的教材上都有這個問題。由於條件是一次只能移動一個盤,且不允許大盤放在小盤上面,所以64個盤的移動次數是:18,446,744,073,709,551,615

這是一個天文數字,若每一微秒可能計算(並不輸出)一次移動,那么也需要幾乎一百萬年。我們僅能找出問題的解決方法並解決較小N值時的漢諾塔,但很難用計算機解決64層的漢諾塔。

假定圓盤從小到大編號為1, 2, ...

輸入

輸入為一個整數n后面跟三個字符A B C。

整數為盤子的數目,后三個字符表示三個桿子的編號。

A是初始時n個盤子所在的桿子,C是目標桿子。

樣例輸入

3 A B C

樣例輸出

move 1 from A to C
move 2 from A to B
move 1 from C to B
move 3 from A to C
move 1 from B to A
move 2 from B to C
move 1 from A to C

提示

(None)

代碼+注釋

#include <bits/stdc++.h>
using namespace std;
int n = 0;
void mov(int n,char a,char c,char b)
{
    if (n == 0)//如果盤子數為0就推出  
    {
        return ;
    }
    else
    {
        mov(n - 1,a,b,c);//把a盤移到b盤,中間借助c盤  
        cout << "move " << n << " from " << a << " to " << c << endl;//把大的一塊放過去就cout  
        mov(n - 1,b,c,a);//把b盤移到c盤,中間借助a盤  
    }
}
int main()
{
    char x,y,z;
    cin >> n >> x >> y >> z;// n = 3    x = A   y = B   z = C      3 A B C 
    mov(n,x,z,y);
    return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM