我正在尝试用 Java 解决骑士的旅行问题。我的目标是计算一匹马在任何维度的棋盘上所有可能的旅行。我尝试使用的是邻接列表数据结构。现在的问题是,我知道哪些方格与一个方格相邻,但我不知道相邻方格的方向。我该如何解决这个问题?
问问题
204 次
1 回答
2
这只是您应该做什么的粗略概述:
- 制作一个“方形”类,其中包含向上、向下、向左和向右的字段(加上访问器和修饰符方法)
- 制作一个“棋盘”类来存储所有方格并设置它们。
- 创建一个“骑士”类在棋盘上移动(并检查移动是否有效)。
- 最后,创建一个驱动程序类来搜索和存储如何移动骑士。
示例 Square 类:
public class Square
{
public final Square up;
public final Square down;
public final Square left;
public final Square right;
public Square(Square up, Square down, Square left, Square right)
{
this.up=up;
this.down=down;
this.left=left;
this.right=right;
}
public Square getUp(){return up;}
public Square getDown(){return down;}
public Square getLeft(){return left;}
public Square getRight(){return right;}
}
示例骑士类:
public class Knight
{
private Square mySquare;
public Knight(Square start)
{
mySquare = start;
}
/* 7 0
* 6 1
*
* 5 2
* 4 3
*/
public boolean move(int dir)
{
switch(dir)
{
case 0: try{
mySquare=mySquare.getUp().getUp().getRight(); return true;
} catch (NullPointerException e) {return false}
case 1: try{
mySquare=mySquare.getUp().getRight().getRight(); return true;
} catch (NullPointerException e) {return false}
case 2: try{
mySquare=mySquare.getDown().getRight().getRight(); return true;
} catch (NullPointerException e) {return false}
case 3: try{
mySquare=mySquare.getDown().getDown().getRight(); return true;
} catch (NullPointerException e) {return false}
case 7: try{
mySquare=mySquare.getUp().getUp().getLeft(); return true;
} catch (NullPointerException e) {return false}
case 6: try{
mySquare=mySquare.getUp().getLeft().getLeft(); return true;
} catch (NullPointerException e) {return false}
case 5: try{
mySquare=mySquare.getDown().getLeft().getLeft(); return true;
} catch (NullPointerException e) {return false}
case 4: try{
mySquare=mySquare.getDown().getDown().getLeft(); return true;
} catch (NullPointerException e) {return false}
default: return false;
}
}
}
于 2016-01-11T01:43:37.287 回答