使用BFS查找图表中的最短路径

时间:2013-12-30 21:47:20

标签: c++ graph

我有二维表所代表的矩形图(我不能改变图表的形式),如:

bool graph[n][m]; //where n and m are dimensions of rectangle

看起来大致如此:

enter image description here

我的问题是:在我的情况下,表示图形顶点之间距离的最佳方式是什么?

并且:在这种情况下我如何使用Dijkstry alghoritm的BFS来找到从graph[x0][y0]graph[x1][y1] 的最短路径?

我试图在互联网上搜索正确的解决方案,但我只看到了基于向量,列表和结构的代码。


重要编辑:

我很抱歉。我的图表仅在开头是矩形。然后它会得到一些变化(在顶点之间的距离)和变化形式到不同的东西。请注意这一点。

2 个答案:

答案 0 :(得分:2)

假设您的“图表”确实是一个地图,您可以在true单元格上保持并仅在它们相邻时移动,那么一个简单的算法基于充满洪水的想法:

  • 创建仅存放(x0, y0)
  • 的点的“有效列表”
  • 在每个“步骤”中,您考虑活动列表中某个点的所有邻居,如果邻居可以继续进行并且尚未访问过,那么您将其链接到您来自的单元格并将其标记为参观。您链接的所有点也会添加到“新的活动列表”集合中。
  • 使用新的活动列表而不是上一个
  • 重新开始的步骤结束
  • 当列表为空时,算法结束,2。您找到(x1, y1)。在最后一种情况下,有一条路径,可以通过跟踪您保存的链接重建最短路径。

答案 1 :(得分:1)

这个怎么样:

unsigned int horizontalEdges[n][m-1];
unsigned int verticalEdges[n-1][m];

Dijkstra算法的哪些部分证明是困难的?