我试图用Java解决Knight的游览问题。 我的目标是在任何尺寸的棋盘上计算所有可能的马匹之旅。我试图使用的是adjadency-lists数据结构。现在的问题是,我知道哪个方块与一个正方形相邻,但我不知道相邻方块的方向。我将如何解决这个问题?
答案 0 :(得分: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;
}
}
}