1栈和队列--用栈来求解汉诺塔问题
2016-12-29 22:35
281 查看
修改游戏规则,只能移动一步,不能直接从最左侧到最右侧,必须经过中间过度。
当有N层塔时,打印最优移动过程和最优总步数。
递归方法
非递归方法,用栈来模拟三个塔
递归方法
(1)终止条件:移动最小号
(2)非最左到最右:三个步骤
(3)最左到最右:五个步骤
2.非递归,用栈来模拟塔
当有N层塔时,打印最优移动过程和最优总步数。
递归方法
非递归方法,用栈来模拟三个塔
递归方法
(1)终止条件:移动最小号
(2)非最左到最右:三个步骤
(3)最左到最右:五个步骤
public static void main(String[] args) { int num = 4; // solution 1 int steps1 = hanoiProblem1(num, "left", "mid", "right"); System.out.println("It will move " + steps1 + " steps."); } public static int hanoiProblem1(int num, String left, String mid, String right) { if (num < 1) { return 0; } return process(num, left, mid, right, left, right); } public static int process(int num, String left, String mid, String right,String from, String to) { if (num == 1) { if (from.equals(mid) || to.equals(mid)) { System.out.println("Move 1 from " + from + " to " + to); return 1; } else { System.out.println("Move 1 from " + from + " to " + mid); System.out.println("Move 1 from " + mid + " to " + to); return 2; } } if (from.equals(mid) || to.equals(mid)) { String another = (from.equals(left) || to.equals(left)) ? right : left; int part1 = process(num - 1, left, mid, right, from, another); int part2 = 1; System.out.println("Move " + num + " from " + from + " to " + to); int part3 = process(num - 1, left, mid, right, another, to); return part1 + part2 + part3; } else { int part1 = process(num - 1, left, mid, right, from, to); int part2 = 1; System.out.println("Move " + num + " from " + from + " to " + mid); int part3 = process(num - 1, left, mid, right, to, from); int part4 = 1; System.out.println("Move " + num + " from " + mid + " to " + to); int part5 = process(num - 1, left, mid, right, from, to); return part1 + part2 + part3 + part4 + part5; } }
2.非递归,用栈来模拟塔
相关文章推荐
- 我是运营,我没有假期
- 每个 Linux 游戏玩家都绝不想要的恼人体验
- 在 Fedora 上使用 Steam play 和 Proton 来玩 Windows 游戏
- Steam 让我们在 Linux 上玩 Windows 的游戏更加容易
- 如何使用 Steam Play 在 Linux 上玩仅限 Windows 的游戏
- 新一代iPad适配应用之游戏篇
- VB实现的《QQ美女找茬游戏》作弊器实例
- C#递归算法之分而治之策略
- 有关数据库SQL递归查询在不同数据库中的实现方法
- C#中的递归APS和CPS模式详解
- WinForm实现按名称递归查找控件的方法
- C#递归方法实现无限级分类显示效果实例
- 使用SqlServer CTE递归查询处理树、图和层次结构
- C#实现洗牌游戏实例
- C#实现的算24点游戏算法实例分析
- C#递归算法之打靶算法分析
- C#中的尾递归与Continuation详解
- 最常见的猜拳小游戏Android代码实现
- C#实现简单的井字游戏实例
- C++编写简单的打靶游戏