n階漢諾塔(樊塔)問題 C語言簡單實現狀態空間法

2021-10-10 01:31:40 字數 786 閱讀 2125

漢諾塔問題或者叫做樊塔問題:

有三個分別名為a,b,c的塔座,a上有n個直徑大小個相同、由小到大編號為1,2,…,n的圓盤。將a上n個圓盤移至c上,移動時必須遵循:

(1)每次只能移動乙個圓盤

(2)圓盤可以插在a,b,c中的任意乙個塔座上;

(3)任何時刻不能將乙個較大的圓盤壓在較小的圓盤之上

很經典的遞迴問題,通過從2階 3階的移動方式 我們不難看出其總的方法要分為三步:

1, 把n-1個圓盤從a移動到b;

2, 把最大的圓盤n從a移動到c;

3, 把n-1個圓盤從b移動到c;

其中第二步是不可分的,所以我們考慮: 把n-1個圓盤從a借助c移動到b

把n-2個圓盤從a移動到c;

把最大的圓盤n-1從a移動到b;

把n-2個圓盤從c移動到b;

以此類推

所以遞迴就出現了

**實現:

#include"stdio.h"

#include"stdlib.h"

void

fanta

(int n, char a

, char b

, char c

)fanta

(n -1,

a,c,

b);printf

("from %c to %c\n",a

,c);

fanta

(n -1,

b,a,

c);}

int main()

C語言 N階漢諾塔問題的遞迴實現

遞迴實現模擬漢諾塔 include define ok 1 define error 0 define true 1 define false 0 define order 3 漢諾塔階數 typedef int status 函式執行狀態 typedef structtowerfoot void ...

n階漢諾塔的遞迴演算法

c語言編寫的一小段 include void hanoi int n,char a,char b,char c int main void hanoi int n,char a,char b,char c 執行結果 環境為codeblocks 演算法分析 1 先考慮乙個盤子的情況,再考慮2個盤子的情...

漢諾塔問題python詳解 《簡單分析》漢諾塔問題

漢諾塔是乙個非常著名的遊戲,遊戲中將會有三根棍子,第一根棍子上有n個從大到小疊起來的盤子,遊戲的目標是將這n個從大到小疊起來的盤子放到第三根棍子上。每一次只允許移動乙個,而且大的盤子永遠在小的盤子的下面。這也是非常著名的遞迴入門題。我們將通過呼叫三次遞迴函式來解決這個問題。暫時不考慮 只考慮解題。先...