用棧來求解漢諾塔問題

2021-10-08 11:48:49 字數 1074 閱讀 1264

漢諾塔問題比較經典,這裡修改一下遊戲規則:現在限制不能從最左側的塔直接移動到最右側,也不能從最右側直接移動到最左側,而是必須經過中間。求當塔有n層的時候,列印最優移動過程和最優移動總步數。

輸入描述:

輸入乙個數n,表示塔層數

輸出描述:

按樣例格式輸出最優移動過程和最優移動總步數

示例1輸入

2
輸出
move 1 from left to mid

move 1 from mid to right

move 2 from left to mid

move 1 from right to mid

move 1 from mid to left

move 2 from mid to right

move 1 from left to mid

move 1 from mid to right

it will move 8 steps.

說明
當塔數為兩層時,最上層的塔記為1,最下層的塔記為2
備註:

1 ≤n

≤12

1 \leq n \leq 12

1≤n≤12

題解(遞迴版本):

參考不帶限制的漢諾塔問題,在它的基礎上改改就行,見**。。。

**:

#include

using

namespace std;

int cnt;

void

move

(int n,

char

*from,

char

*to)

void

hanoi

(int n,

char

*from,

char

*to,

char

*mid)

else

}int

main

(void

)

題解(非遞迴版本):

留坑,會了再來填。。。

用棧來求解漢諾塔問題

說明 本文是左程雲老師所著的 程式設計師面試 指南 第一章中 用棧來實現漢諾塔問題 這一題目的c 棧方法的復現。感謝左程雲老師的支援。題目 漢諾塔問題比較經典,這裡修改一下遊戲規則 現在限制不能從最左側的塔直接移動到最右側,也不能從最右側直接移動到最左側,而必須經過中間。求當有n層塔的時候,列印最優...

漢諾塔問題求解

漢諾塔問題求解 問題描述 a,b,c三個柱子,其中a插著n個盤子從上到下按照小到大放,嘗試以b盤子為中介,每次移一次,將a中的盤子從上到下按照小到大插 演算法 n個盤子全放在a上面,分為兩步走 將前面 n 1 個盤子全部放到b上面,然後將第n個盤子放到c中 這樣子b中就有 n 1 個盤子,再以a為中...

用遞迴演算法求解漢諾塔問題

檔名稱 test3.1.cpp 完成日期 2016年09月08日 版本號 v1.0 問題描述 用遞迴演算法求解漢諾塔問題,其複雜度可以求得為o 2 n 是指數級的演算法 不同盤子所消耗的時間 輸入描述 無 程式輸出 演算法的執行時間 include define disccount 4 改變disc...