作者fmtshk (fmtshk)
看板C_and_CPP
标题[讨论] 使用C语言做Hanoi Tower
时间Sat May 9 19:12:52 2020
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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1589022774.A.38E.html
1F:→ Lipraxde: 它有动啊,不过动的不是你想像的那个 05/09 21:11
https://ideone.com/7OePy7 换了个写法硬堆出来了@@
※ 编辑: fmtshk (36.228.70.205 台湾), 05/10/2020 06:19:05
2F:→ Lipraxde: 用 int * 修改 stack 上的 int,那修改 stack pointer 05/10 10:08
3F:→ Lipraxde: (int *) 该用啥?别忘了 pointer type 也是种 type 05/10 10:08
4F:推 wa007123456: 其实用不到堆叠 你把to和mid交换即可 05/10 18:11
5F:→ wa007123456: hanoi(n-1, from, to, mid); 如果这是第一个递回 05/10 18:12
6F:→ wa007123456: 说错..每次移动的时候就印出来即可 05/10 18:14
7F:→ wa007123456: void move(int n,char from,char to){...} 05/10 18:15
8F:→ wa007123456: move 的 n 代表盘子的序号 05/10 18:17
9F:→ wa007123456: 1代表最上面的盘子 n代表最下面的盘子 05/10 18:18
10F:推 wa007123456: 把move()放在两个递回之间 05/10 18:20
11F:推 wa007123456: from char跟to char 是柱子的代号(A,B,C) 05/10 18:29
12F:推 wa007123456: 所以hanoi引数可以改成(int n,char from,char to, 05/10 18:32
13F:→ wa007123456: char mid) 05/10 18:33