Java 用邻接矩阵求迷宫图的最短路径

Java 用邻接矩阵求迷宫图的最短路径,java,graph,shortest-path,maze,Java,Graph,Shortest Path,Maze,我在解决一个特别的问题时遇到了一些困难,那就是在迷宫图中寻找最短路径。可能是因为迷宫是由一个四维数组初始化的,比如 nexting=新的布尔值[height][width][height][width] 第一对和第二对索引以行/列的形式指定图形中的位置。图表如下所示: XXXXXXXXXXXXX ..........X.X X.XXX.XXX.X.X X.X.X...X.X.X X.X.XXX.XXX.X X...X.....X.. XXXXXXXXXXXXX ArrayList必须保存路径中

我在解决一个特别的问题时遇到了一些困难,那就是在迷宫图中寻找最短路径。可能是因为迷宫是由一个四维数组初始化的,比如
nexting=新的布尔值[height][width][height][width]
第一对和第二对索引以行/列的形式指定图形中的位置。图表如下所示:

XXXXXXXXXXXXX
..........X.X
X.XXX.XXX.X.X
X.X.X...X.X.X
X.X.XXX.XXX.X
X...X.....X..
XXXXXXXXXXXXX
ArrayList必须保存路径中顶点的位置,顺序从开始到结束(包括结束)

我已经编写了构造函数和连接方法;然而,我在寻找最短路径方法时遇到了困难。 下面是我如何创建迷宫图的示例:

final int edges[][] = {{1, 0, 1, 1}, {1, 1, 1, 2}, {1, 1, 2, 1}, 
                {1, 2, 1, 3}, {1, 3, 1, 4}, {1, 4, 1, 5}, {1, 5, 1, 6}, 
                {1, 5, 2, 5}, {1, 6, 1, 7}, {1, 7, 1, 8}, {1, 8, 1, 9}, 
                {1, 9, 2, 9}, {1, 11, 2, 11}, {2, 1, 3, 1}, {2, 5, 3, 5}, 
                {2, 9, 3, 9}, {2, 11, 3, 11}, {3, 1, 4, 1}, {3, 3, 4, 3}, 
                {3, 5, 3, 6}, {3, 6, 3, 7}, {3, 7, 4, 7}, {3, 11, 4, 11}, 
                {4, 1, 5, 1}, {4, 3, 5, 3}, {4, 7, 5, 7}, {4, 11, 5, 11}, 
                {5, 1, 5, 2}, {5, 2, 5, 3}, {5, 5, 5, 6}, {5, 6, 5, 7}, 
                {5, 7, 5, 8}, {5, 8, 5, 9}, {5, 11, 5, 12}};

        MazeGraph maze = new MazeGraph(13, 7); 

        for (int[] edge : edges) 
            maze.connect(new Location(edge[0], edge[1]), new Location(edge[2], edge[3]));
首先,这个

adjacent = new boolean[height][width][height][width];
与此相矛盾的是:

第一对和第二对索引指定图形中的位置 以行/列的形式

它是列/行,而不是行/列

应该为您的矩阵实现。引述:

让我们开始的节点称为初始节点。让 节点Y的距离是从初始节点到Y的距离。 Dijkstra的算法将分配一些初始距离值,并将 试着一步一步地改进它们

  • 为每个节点指定一个暂定距离值:为每个节点将其设置为零 我们的初始节点,对于所有其他节点,都是无穷大的

  • 将初始节点设置为当前节点。将所有其他节点标记为未访问。创建一个包含所有未访问节点的集,称为未访问集

  • 对于当前节点,考虑所有未访问的邻居并计算它们的暂定距离。比较新计算的 到当前指定值的暂定距离,并指定 小一点的。例如,如果当前节点A标记为 距离为6,与相邻B连接的边具有长度 2,则到B(通过A)的距离为6+2=8。如果B是 以前标记的距离大于8,然后将其更改为8。 否则,保留当前值

  • 当我们考虑完当前节点的所有邻居后,将当前节点标记为已访问并将其从 未访问的设置。已访问的节点将不再被检查

  • 如果目标节点已标记为已访问(在规划两个特定节点之间的路由时),或者如果 未访问集中节点之间的距离为无穷大(当 计划完整的遍历;在没有连接时发生 在初始节点和其余未访问的节点之间),然后停止。 算法已经完成

  • 否则,选择标有最小暂定距离的未访问节点,将其设置为新的“当前节点”,然后转到 回到步骤3

  • 你听说过Dijkstra的算法吗?