Arrays 图形/二维数组遍历和路径

Arrays 图形/二维数组遍历和路径,arrays,algorithm,search,graph,traversal,Arrays,Algorithm,Search,Graph,Traversal,我正在研究一些计算机科学问题,许多问题是关于图遍历和最短路径的。例如,可能会要求您查找从图形中的一点到另一点的最短路径。为了解决这个问题,可以使用广度优先搜索。主要的一点是,图通常具有相关函数,这些函数给出了节点可能具有的任何相邻节点 然而,如果问题有一个由1和0组成的二维矩阵,其中1是可遍历的,0是不可遍历的,那么如何解决这个问题呢?例如: 1101 0110 1011 如果给定一个坐标,比如[0][0],可能会要求您找到所有可能的路径或到[n][n]点的最短路径。你打算怎么做?如果有人有任

我正在研究一些计算机科学问题,许多问题是关于图遍历和最短路径的。例如,可能会要求您查找从图形中的一点到另一点的最短路径。为了解决这个问题,可以使用广度优先搜索。主要的一点是,图通常具有相关函数,这些函数给出了节点可能具有的任何相邻节点

然而,如果问题有一个由1和0组成的二维矩阵,其中1是可遍历的,0是不可遍历的,那么如何解决这个问题呢?例如:

1101
0110
1011

如果给定一个坐标,比如[0][0],可能会要求您找到所有可能的路径或到[n][n]点的最短路径。你打算怎么做?如果有人有任何代码示例,我将不胜感激。

请检查一些最好的算法,如Dijkstra算法和BFS。它会解决你的问题


我假设你给出的矩阵是一种地图或迷宫,而不是邻接矩阵。因此,在您的矩阵中

1101
0110
1011
您可以从
[0][0]
转到
[1][0]
,或从
[1][1]
转到
[1][0]
[2][1]
[0][0]
[0][2]
如果允许对角移动的话

要将图形算法应用于此类矩阵,首先需要将其转换为邻接列表或邻接矩阵,方法是为矩阵中的每个条目或节点指定索引:

 0   1   2   3
 4   5   6   7
 8   9  10  11
现在列出可从
节点0
[0][0]
访问的所有节点:

0 -> 1, 5
因为我们可以从
0
到达
1
5
节点。(我在这里假设允许对角移动。)这将为您提供邻接列表中的第一个条目。邻接矩阵的等效值为:

0 1 0 0 0 1 0 0 0 0 0 0
作为矩阵的第一行(第0行)


对矩阵中的每个节点重复此过程,您将获得完整的邻接列表或矩阵,以用于常规图形算法。

图形可以由邻接列表和矩阵表示。你的问题涉及到矩阵的图形表示。这里可以采用通常的BFS(或加权图的Dijkstra)。然而,在稀疏图的情况下,邻接列表是首选的,因为它减少了空间需求。