1栈和队列--用栈来求解汉诺塔问题
来源:互联网 发布:apache curator 编辑:程序博客网 时间:2024/04/29 15:56
修改游戏规则,只能移动一步,不能直接从最左侧到最右侧,必须经过中间过度。
当有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.非递归,用栈来模拟塔
0 0
- 1栈和队列--用栈来求解汉诺塔问题
- 栈和队列(6)--用栈来求解汉诺塔问题①
- 栈和队列(6)--用栈来求解汉诺塔问题②
- 数据结构:栈和队列-迷宫问题求解
- 用栈和队列求解迷宫问题
- 栈和队列——用栈来求解汉诺塔问题(非递归)(java实现)
- 使用栈和队列求解迷宫问题(标准库)
- 队列应用1:求解报数问题
- 用栈和队列实现迷宫求解
- 数据结构和算法设计(迷宫求解问题的栈和队列的实现)
- 迷宫求解非递归 DFS BFS(应用栈和队列)
- 用栈和队列实现中缀表达式的求解
- 1_6_0用栈来求解汉诺塔问题_传统汉诺塔问题求解
- 用栈来求解汉诺塔变形问题
- 1_6_1用栈求解汉诺塔问题_利用递归求解增强版汉诺塔问题
- 用栈和递归求解迷宫问题
- [Java]使用队列求解josephus问题
- 利用BFS、队列求解迷宫问题
- redis学习系列--5.redis-sets 类型
- 用axis解析webservice并调用
- java 接口的引入
- 把时间转化为毫秒,把毫秒转化为时分秒
- 自动识别OpenCV版本并添加依赖库
- 1栈和队列--用栈来求解汉诺塔问题
- Html练习一
- Android第四课;按钮的监听
- c++时间转换与表示之04(与日期和时间相关的函数及应用)
- Hive ROW_NUMBER,RANK(),DENSE_RANK()
- Coursera 零基础Python入门系列课程习题解答
- SVN使用
- Nginx浅学
- Spark1.3从创建到提交:3)任务调度初始化源码分析