-->

找到一个矩阵的最短路径算法(Algorithm to find the shortest path

2019-10-19 01:46发布

我试图找到如下问题的算法,但我不能。

你有一个矩阵,10X6如果它很重要。 (10关于y维度x维度6)。 所述算法接收2点,打开点和目标点。 该阵列是全0和1的,它应该找到1点的的最短路径之间,并在这条道路(的方式到目标的下一个点)返回的第一个点。 但这里的渔获:

每个点都可以得到只有以下几点值:

  1. 它上面的点。
  2. 它下面的点。
  3. 点留给它。
  4. 点权给它。

使事情更加困难:每点,其他点的值可能会有所不同。 例如:

  1. 打开点是0,0。 的0,1的值是1;
  2. 打开点是0,2。 的0,1的值是0。

我可以计算出的值,所以应该不是你没关系......因此,我认为解决这个问题是递归的,因为最后一个条件的唯一途径,但如果你找到另一种方式,欢迎您。

该解决方案应该是LUA,C#Java。

Answer 1:

你可以简单地解释你的矩阵图。 每单元(i,j)的对应于节点V(I,j)和两个节点如果仅当它们的相应的小区是邻居并且两者都设置为1连接。

下面的例子矩阵具有四个顶点V(0,0),V(0,1),V(1,0),和v(1,1),与边缘{V(0,0),V(0 ,1)}和{v(0,1),v(1,1)}(在顶点v(1,0)是分离的)。

1 1
0 1

当你的图是不加权的,你可以简单地使用广度优先搜索(BFS)找到最短路径。 对于伪看到: http://en.wikipedia.org/wiki/Breadth-first_search#Pseudocode

你限制在一个矩阵中的每个条目只知道它的邻接项无所谓。 在谈到图形,这意味着曾经顶点知道它的邻居,而这正是你在BFS需要什么。 使用从不同的起点搜索不会使问题更难既可以当不同的图表。

就在评论上述链接的poseudocode:

  1. 它只是检查是否有连接或不。 如果你确实想拥有的最短路径,您需要更改如下。 当从邻居牛逼看出,当一个新的顶点u被添加到队列中,您可以选择存储在û指着吨链接。 当你终于找到你的目标,后面跟随的链接给你的最短路径。

  2. 使用一组存储其已经访问的元素是低效的。 在你的情况下,只需使用同样大小的布尔矩阵作为输入矩阵,以纪念参观了顶点。



文章来源: Algorithm to find the shortest path in a matrix