河内塔逻辑

时间:2014-04-27 08:27:57

标签: java towers-of-hanoi

好的,所以我在河内塔问题上有一个任务。我得到了代码,并让它工作,但我只是不知道它背后发生了什么。有人可以解释一下吗?我不理解solveTower(num-1, from, other, to)solveTower(1, from, to, other)以及solveTower(num-1, other, to, from)的行。我理解它在做什么,它只是使用另一个将磁盘的数量从一个挂钩移动到另一个挂钩。我只是不明白它背后发生了什么。就像为什么我必须将num-1磁盘从左侧挂钩移动到中间位置,将最大磁盘从左侧挂钉移动到右侧挂钩,并将num-1磁盘从中间向右移动?为什么我不能像solveTower(num, from, to, other)那样说出将所有磁盘从左侧挂钩移动到右侧挂钩? 这是我的司机:

public class Hanoi_Driver
{
  public static void main(String[] args) 
  {
    Tower tower = new Tower();
    tower.solveTower();
  }
}

这是我的目标:

import java.util.Scanner;

public class Tower 
{

  private int size;
  private String fromPeg = "A";
  private String toPeg = "C";
  private String otherPeg = "B";

  public Tower() 
  {
    this.size = size;
    this.fromPeg = fromPeg;
    this.toPeg = toPeg;
    this.otherPeg = otherPeg;
  }

  public void solveTower()
  {
    Scanner keyboard = new Scanner(System.in);
    System.out.println("What do you want the size to be?");
    size = keyboard.nextInt();
    System.out.println("Steps for solving " + size + " disk tower of hanoi puzzle, ");

    solveTower(size, fromPeg, toPeg, otherPeg);
  }

  private void solveTower(int num, String from, String to, String other) {

    if (num == 1) {
      System.out.println("Move disk from " + from +
                         " to " + to + ".");
    }
    else {
      solveTower(num-1, from, other, to);
      solveTower(1, from, to, other);
      solveTower(num-1, other, to, from);
    }
  }
}

1 个答案:

答案 0 :(得分:0)

这些行

  solveTower(num-1, from, other, to);
  solveTower(1, from, to, other);
  solveTower(num-1, other, to, from);

表示如果尚未找到解决方案(else的{​​{1}},换言之,num == 1或实际上num > 1时),那么#1:移动除了num < 1num-1之外的所有人(from)(而非other),#2:将剩余的一个移到正确的目标to上, #3:将原来的to移回other
每次,第三个参数都是要使用的额外挂钩 当你从这里开始:

to

你说&#34;解决整个问题&#34;。
对solveTower`的其他递归调用将问题分解为更小的部分。
这对我来说很好用:

solveTower(size, fromPeg, toPeg, otherPeg);

如果大小超过3,那么解决问题的步骤就会变得更加复杂。尺寸1和2工作正常,但尺寸0未正确处理。 (对于0或更小的尺寸,解算器中没有检查。)
您可以在Tower构造函数中删除一些不必要的代码;它只需要:

公共塔楼()   {   }

您可以关闭扫描仪键盘:

What do you want the size to be?
3
Steps for solving 3 disk tower of hanoi puzzle, 
Move disk from A to C.
Move disk from A to B.
Move disk from C to B.
Move disk from A to C.
Move disk from B to A.
Move disk from B to C.
Move disk from A to C.