漢諾塔 非遞迴 規律發現解答

2021-09-19 15:45:57 字數 940 閱讀 9161

當確定盤數為n時,它所需要進行操作的次數就確定為2^n-1

當n是偶數時

1)奇數步驟一定有a->b,b->c,c->a,a->b的重複順序輸出

2)偶數步驟一定有固定的7對序對輸出順序,為

a->c,a->b,c->b,a->c,b->a,b->c,a->c

當n是奇數時

1)奇數步驟一定有a->c,c->b,b->a,a->c的重複順序輸出

2)步驟為2,2+4,2+4+4…一定有a->b,b->c,c->a,a->b的重複順序輸出

3)步驟為4的倍數時一定有7個對固定輸出順序,為

a->c,a->b,c->b,a->c,b->a,b->c,a->c

**實現

#include#includevoid oushu(int n);

char end[7]=;

char first='a';

int mark=0;

for(int i=1; i<=n; i++)else

}else}}

}void jishu(int n);

char end[7]=;

char first='a',seconed='a',third='a';

int contr=2;

int mark=0;

for(int i=1; i<=n; i++)else

}else if(i==contr)else

}else}}

}int main()else

return 0;

}

注意:該**用int型別進行計算迴圈次數,但int範圍不夠,所以可測資料有限,這裡只是提供這個規律。。。。

漢諾塔非遞迴演算法

輸入格式 輸入為乙個正整數n,即起始柱上的盤數。輸出格式 每個操作 移動 佔一行,按柱1 柱2的格式輸出 輸入樣例 3輸出樣例 a c a b c b a c b a b c 乙個美國學者總結得到 所有的漢諾塔移動可以總結為重複的兩步,我們假設現在最小的圓盤在a柱子上,柱子為a,b,c 第二步 對a...

漢諾塔遞迴及非遞迴解法

1.經典遞迴解法 include void mov char a,char b void recursive hanoi int n,char a,char b,char c int main 2.非遞迴解法 從漢諾塔的遞迴解法可以看出,它跟二叉樹中序遍歷遞迴解法是乙個道理。既然二叉樹非遞迴解法能寫...

非遞迴 遞迴 漢諾塔演算法實踐

漢諾塔演算法是很多公司的面試題,經常會讓手寫,這裡總結了一下 1 最最最常見的也是最簡單的漢諾塔演算法,遞迴 這也是學習遞迴的乙個經典演算法題 漢諾塔演算法 遞迴 ps 列印移動過程 param level 層數 param from 起始位置 param to 目標位置 param other 多...