看板 C_and_CPP 關於我們 聯絡資訊
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
Lipraxde: 它有動啊,不過動的不是你想像的那個 05/09 21:11
https://ideone.com/7OePy7 換了個寫法硬堆出來了@@ ※ 編輯: fmtshk (36.228.70.205 臺灣), 05/10/2020 06:19:05
Lipraxde: 用 int * 修改 stack 上的 int,那修改 stack pointer 05/10 10:08
Lipraxde: (int *) 該用啥?別忘了 pointer type 也是種 type 05/10 10:08
wa007123456: 其實用不到堆疊 你把to和mid交換即可 05/10 18:11
wa007123456: hanoi(n-1, from, to, mid); 如果這是第一個遞迴 05/10 18:12
wa007123456: 說錯..每次移動的時候就印出來即可 05/10 18:14
wa007123456: void move(int n,char from,char to){...} 05/10 18:15
wa007123456: move 的 n 代表盤子的序號 05/10 18:17
wa007123456: 1代表最上面的盤子 n代表最下面的盤子 05/10 18:18
wa007123456: 把move()放在兩個遞迴之間 05/10 18:20
wa007123456: from char跟to char 是柱子的代號(A,B,C) 05/10 18:29
wa007123456: 所以hanoi引數可以改成(int n,char from,char to, 05/10 18:32
wa007123456: char mid) 05/10 18:33