Java 骑士';带邻接表的s-tour算法
我试图用Java解决骑士之旅的问题。Java 骑士';带邻接表的s-tour算法,java,depth-first-search,Java,Depth First Search,我试图用Java解决骑士之旅的问题。 我的目标是计算一匹马在棋盘上的所有可能行程。我尝试使用的是Adjandcy列表数据结构。现在的问题是,我知道哪些方块与某个方块相邻,但我不知道相邻方块的方向。我该如何解决这一问题?以下是您应该做的粗略概述: 创建一个带有向上、向下、向左和向右字段的“Square”类(加上访问器和修改器方法) 制作一个“棋盘”类来存储所有的方块并设置它们 制作一个“骑士”类在棋盘上移动(并检查移动是否有效) 最后,创建一个driver类来搜索和存储如何移动骑士 方形样品类别:
我的目标是计算一匹马在棋盘上的所有可能行程。我尝试使用的是Adjandcy列表数据结构。现在的问题是,我知道哪些方块与某个方块相邻,但我不知道相邻方块的方向。我该如何解决这一问题?以下是您应该做的粗略概述:
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;
}
}
}
你的邻接列表是存储“合法跳跃”还是存储“相邻方块”?。为什么你需要方向,只存储“方块ID”不是更简单吗?第一个方块是“0”,以此类推。你说的“合法跳跃”是什么意思?在你的棋盘上,“合法跳跃”是一个合法的骑士动作。当谈论邻接列表时,会想到网络。您正在尝试构建一个贯穿所有方块的网络,只有在合法的情况下才能在方块之间跳跃,通过连接方块来重新构建网络是有意义的。您能否详细说明“相邻方块的方向”是什么意思