您的位置:首页 > 理论基础 > 数据结构算法

数据结构的应用——使用栈和递归实现Hanoi问题求解

2011-03-28 14:34 519 查看
package ds.linerlist;
import java.util.Stack;
/**
* 用栈和递归实现N阶汉诺塔。
* @author <a href="mailto:bao.yiming@live.cn" mce_href="mailto:bao.yiming@live.cn">Bao Yiming</a>
*/
public class Hanoi {
/**
* 将塔座source上按直径由小到大且至上而下编号为1至n
* 的n个圆盘按规则搬到塔座target上,temp可用作辅助塔座。
* @param n 汉诺塔的阶。
* @param source 源塔。
* @param temp 中间塔。
* @param target 目标塔。
*/
public void go(int n, Stack source, Stack temp, Stack target) {
/**
* 当汉诺塔的阶为1时,直接将其从源塔座搬至目标塔座。
* 当汉诺塔高于1阶时,将从上至下n-1个圆盘以目标塔为辅助搬至中间塔座,
* 将第n个圆盘搬至目标塔座,再将中间塔座的圆盘搬至目标塔座上。
* 在将中间塔座的圆盘搬至目标塔座上的过程中,递归调用方法。
*/
if (1 == n) {
move(source, target);
} else {
go(n - 1, source, target, temp);
move(source, target);
go(n - 1, temp, source, target);
}
}
/**
* 搬圆盘,将源塔座的最顶上的圆盘搬到目标塔座。
* @param source
* @param target
*/
private void move(Stack source, Stack target) {
target.push(source.pop());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐