漢諾塔問題求解
問題描述:a,b,c三個柱子,其中a插著n個盤子從上到下按照小到大放,嘗試以b盤子為中介,每次移一次,將a中的盤子從上到下按照小到大插;
演算法:n個盤子全放在a上面,分為兩步走:將前面(n-1)個盤子全部放到b上面,然後將第n個盤子放到c中;
這樣子b中就有(n-1)個盤子,再以a為中介,全部放到c中。
數學建模:
設n個盤子需要放an次,
an=a(n-1)+1+a(n-1);n=a,an=1;
通過簡單的迭代,即可求出an=2^n-1;
程式實現:
hanoi(n,a,b,c)
=move(a,c) if(n=1)
hanoi(n-1,a,c,b);
move(a,c)
hanoi(n-1,b,a,c)
#include "stdafx.h"
#include "iostream"
using namespace std;
void move(char a,char b)
void hanoi(int n,char a,char b,char c)
}int main()
執行**如下:
漢諾塔問題求解(遞迴)
人工智慧,零基礎入門!例項說明 漢諾塔問題的描述如下 有a b和c 3跟柱子,在a上從下往上按照從小到大的順序放著64個圓盤,以b為中介,把盤子全部移動到c上。移動過程中,要求任意盤子的下面要麼沒有盤子,要麼只能有比它大的盤子。本例項將演示如何求解3階漢諾塔問題。實現過程 新建乙個類hanoitow...
遞迴求解漢諾塔問題
漢諾塔 漢諾塔 tower of hanoi 源於印度傳說中,大梵天創造世界時造了三根金鋼石柱子,其中一根柱子自底向上疊著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。遞迴的思路就是把問題簡化到更...
漢諾塔(Hanoi)問題求解
n 階hanoi塔問題 假設有3個分別命名為x y z的塔座,在塔座x上插有n個直徑大小各不相同 依小到大編號為1,2,n的圓盤。現在要求將x軸上的n個圓盤移至塔座z上並仍然按同樣順序疊排,圓盤移動時必須遵循下列規則 1 每次只能移動乙個圓盤 2 圓盤可以插在x y和z中的任一塔座上 3 任何時候都...