图/二维数组遍历和路径

时间:2014-10-13 06:44:08

标签: arrays algorithm search graph traversal

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

但是,如果问题有一个二维矩阵,让我们说1和0,其中一个1是可遍历的,0是不是,那么如何解决这个问题呢?例如:

1101
0110
1011

如果给出坐标,例如[0] [0],可能会要求您查找所有可能的路径或[n] [n]点的最短路径。你会怎么做呢?如果有人有任何代码示例,我将非常感激。

2 个答案:

答案 0 :(得分:0)

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

https://en.wikipedia.org/wiki/Breadth-first_search

https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

答案 1 :(得分:0)

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

1101
0110
1011

您可以从[0][0]转到[1][0],或从[1][1]转到[1][0][2][1],可能还有[0][0],{如果允许对角移动,则{1}}和[0][2]

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

[2][2]

现在列出所有可从 0 1 2 3 4 5 6 7 8 9 10 11 node 0到达的节点:

[0][0]

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

0

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

对矩阵中的每个节点重复此过程,您将拥有完整的邻接列表或矩阵,以便在常规图算法中使用。