汉诺塔的问题:这个问题在以前也敲过代码,但是算法和数据结构在平时的时候,就是用不到,
这就导致了,过一段时间,我忘记了,而且忘记的一干二净,绝不留下,这也很佩服自己啊。
有要面试笔试了,很痛苦啊,这种感觉,linux,算法,数据结构,数据库,java框架,android,
等等好多都没有系统的复习,真是奔命啊。。。
网上转了一份汉诺塔的代码:添加了一些代码,其中的原理无法猜透,将就着用吧,希望笔试面试的
时候用到:
package job;
public class Hannuota {
public Hannuota() {
}
public static void main(String args[]) {
int disks = 64;// 这是盘子的个数(可以更改)
final int source = 1;// 这是所有盘子初始位置(都是在第一根柱子上),这个最好不要改
final int desk = 3;// 这是所有盘子最终位置(都是在第三根柱子上),这个最好不要改
final int spare = 2;// 这是用于临时存放盘子的位置(也就是第二根柱子),这个最好不要改
yidong(disks, source, desk, spare);
}
/**
*
* @param disks 盘子的个数
* @param source 放盘子原始的棒的名字:我们称呼为 1
* @param desk 放盘子最后的棒的名字:我们称呼为3
* @param spare 放盘子中间的棒的名字:我们称呼为2
*/
public static void yidong(int disks, int source, int desk, int spare) {// 这是递归方法
// 如果只有一个盘子,那就直接从source(柱子一)移动到desk(柱子三)
if (disks == 1) {
System.out.println(source + "=>" + desk);
}
else {
yidong(disks - 1, source, spare, desk); // 除了最小面一个盘子,把这些盘先移动到中间的盘去
System.out.println(source + "=>" + desk); //最下面盘子转移,打印信息
yidong(disks - 1, spare, desk, source); //再把盘子从中间的棒的位置专业到最后一个棒去
}
}
}