我正在尝试计算 5x5 场地上所有可能的骑士移动。
为此,我尝试使用 DFS(深度优先搜索)和 Graph 类。
该字段看起来像这样(为每个字段使用一个 id):
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24
可能的步骤是这样定义的(使用图的边缘,G):
G.addEdge(0, 1); G.addEdge(0, 5);
G.addEdge(1, 2); G.addEdge(1, 6);
G.addEdge(2, 3); G.addEdge(2, 7);
G.addEdge(3, 4); G.addEdge(3, 8);
G.addEdge(4, 9);
G.addEdge(5, 6); G.addEdge(5, 10);
G.addEdge(6, 7); G.addEdge(6, 11);
G.addEdge(7, 8); G.addEdge(7, 12);
G.addEdge(8, 9); G.addEdge(8, 13);
G.addEdge(9, 14);
G.addEdge(10, 11); G.addEdge(10, 15);
G.addEdge(11, 12); G.addEdge(11, 16);
G.addEdge(12, 13); G.addEdge(12, 17);
G.addEdge(13, 14); G.addEdge(13, 18);
G.addEdge(14, 19);
G.addEdge(15, 16); G.addEdge(15, 20);
G.addEdge(16, 17); G.addEdge(16, 21);
G.addEdge(17, 18); G.addEdge(17, 22);
G.addEdge(18, 19); G.addEdge(18, 23);
G.addEdge(19, 24);
G.addEdge(20, 21);
G.addEdge(21, 22);
G.addEdge(22, 23);
G.addEdge(23, 24);
这是我试图找到可能的目的地:
private static void calculatePath(int currentSquare) {
short tours = 0;
for (int point : G.adj(currentSquare)) {
System.out.print(currentSquare + " ");
if (dfs.marked(currentSquare)){
tours++;
dfs.unmark(currentSquare);
calculatePath(point);
}
}
System.out.println(currentSquare + " - tours: " + tours);
System.out.println("\n");
}
例如,如果我尝试通过 调用此递归函数calculatePath(20)
,它应该返回 11 和 17,因为这些是骑士可以从该字段跳转到的唯一可能的目的地(id 为 20)。未标记的方格是已经到达的方格。
变量tours
将是可能的旅行数量(在 的情况下为 2 calculatePath(20)
)。