[討論] 使用C語言做Hanoi Tower

看板C_and_CPP (C/C++)作者 (fmtshk)時間5年前 (2020/05/09 19:12), 5年前編輯推噓4(409)
留言13則, 2人參與, 5年前最新討論串1/1
https://ideone.com/B7uwPt ←(我的程式碼) 我想寫的功能:先輸入一個數,用來當成河內塔的圓盤數量 然後程式會output出,把所有圓盤 從A塔 移動到 C塔 的步驟 並且每個步驟要印出ABC塔目前的情況,如下圖範例 https://i.imgur.com/bTHcqEi.png
我的想法是做三個堆疊 然後用三個top指標指著 每次移動就pop某個塔最上層的圓盤,再push到另一個塔 但寫完之後似乎有點怪怪的,試了一下2個圓盤 https://i.imgur.com/uLhBBOq.png
中間那一步不會動... 問題好像是,pop跟push函數中的"top++"和"top--"沒有真的讓堆疊的top指標移動 要如何才能讓指標移動呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.163.21.88 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1589022774.A.38E.html

05/09 21:11, 5年前 , 1F
它有動啊,不過動的不是你想像的那個
05/09 21:11, 1F
https://ideone.com/7OePy7 換了個寫法硬堆出來了@@ ※ 編輯: fmtshk (36.228.70.205 臺灣), 05/10/2020 06:19:05

05/10 10:08, 5年前 , 2F
用 int * 修改 stack 上的 int,那修改 stack pointer
05/10 10:08, 2F

05/10 10:08, 5年前 , 3F
(int *) 該用啥?別忘了 pointer type 也是種 type
05/10 10:08, 3F

05/10 18:11, 5年前 , 4F
其實用不到堆疊 你把to和mid交換即可
05/10 18:11, 4F

05/10 18:12, 5年前 , 5F
hanoi(n-1, from, to, mid); 如果這是第一個遞迴
05/10 18:12, 5F

05/10 18:14, 5年前 , 6F
說錯..每次移動的時候就印出來即可
05/10 18:14, 6F

05/10 18:15, 5年前 , 7F
void move(int n,char from,char to){...}
05/10 18:15, 7F

05/10 18:17, 5年前 , 8F
move 的 n 代表盤子的序號
05/10 18:17, 8F

05/10 18:18, 5年前 , 9F
1代表最上面的盤子 n代表最下面的盤子
05/10 18:18, 9F

05/10 18:20, 5年前 , 10F
把move()放在兩個遞迴之間
05/10 18:20, 10F

05/10 18:29, 5年前 , 11F
from char跟to char 是柱子的代號(A,B,C)
05/10 18:29, 11F

05/10 18:32, 5年前 , 12F
所以hanoi引數可以改成(int n,char from,char to,
05/10 18:32, 12F

05/10 18:33, 5年前 , 13F
char mid)
05/10 18:33, 13F
文章代碼(AID): #1Ujf0sEE (C_and_CPP)
文章代碼(AID): #1Ujf0sEE (C_and_CPP)