Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用BFS在图形中查找最短路径_C++_Graph - Fatal编程技术网

C++ 使用BFS在图形中查找最短路径

C++ 使用BFS在图形中查找最短路径,c++,graph,C++,Graph,我有一个由二维表格表示的矩形图(我不能改变图形表示的形式),如下所示: bool graph[n][m]; //where n and m are dimensions of rectangle 一般看来: bool graph[n][m]; //where n and m are dimensions of rectangle 我的问题是:在我的例子中,表示图形顶点之间距离的最佳方式是什么? 和:在这种情况下,我如何使用Dijkstry alghoritm的BFS找到从图[x0][y0]

我有一个由二维表格表示的矩形图(我不能改变图形表示的形式),如下所示:

bool graph[n][m]; //where n and m are dimensions of rectangle
一般看来:

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

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

和:在这种情况下,我如何使用Dijkstry alghoritm的BFS找到从
图[x0][y0]
图[x1][y1]
的最短路径

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


重要编辑:

非常抱歉。我的图表仅在开头是矩形的。然后它会得到一些改变(顶点之间的距离),改变形状,使之不同。请获取相关信息。

这个怎么样:

unsigned int horizontalEdges[n][m-1];
unsigned int verticalEdges[n-1][m];
Dijkstra算法的哪一部分被证明是困难的?

这个呢:

unsigned int horizontalEdges[n][m-1];
unsigned int verticalEdges[n-1][m];
Dijkstra算法的哪一部分被证明是困难的?

这个呢:

unsigned int horizontalEdges[n][m-1];
unsigned int verticalEdges[n-1][m];
Dijkstra算法的哪一部分被证明是困难的?

这个呢:

unsigned int horizontalEdges[n][m-1];
unsigned int verticalEdges[n-1][m];
Dijkstra算法的哪一部分被证明是困难的?

假设你的“图形”确实是一张地图,当单元格相邻时,你只能停留和移动在
true
单元格上,那么一个简单的算法基于泛洪填充思想:

  • 创建一个点的“活动列表”,仅在其中放置
    (x0,y0)
  • 在每一个“步骤”中,你都要考虑活跃列表中某个点的所有邻居,如果邻居可以继续走,而且还没有被访问,那么你就把它链接到你来自的单元,并把它标记为访问。您链接的所有点也将添加到“新活动列表”集合中
  • a步骤结束后,您将使用新的活动列表而不是上一个列表重新开始
  • 当其中一个为1时,算法结束。列表为空,2。您可以找到
    (x1,y1)
    。在最后一种情况下,有一条路径,可以按照保存的链接重建最短的路径
假设你的“图形”确实是一张地图,当单元格相邻时,你只能停留在
true
单元格上移动,那么一个简单的算法基于泛洪填充思想:

  • 创建一个点的“活动列表”,仅在其中放置
    (x0,y0)
  • 在每一个“步骤”中,你都要考虑活跃列表中某个点的所有邻居,如果邻居可以继续走,而且还没有被访问,那么你就把它链接到你来自的单元,并把它标记为访问。您链接的所有点也将添加到“新活动列表”集合中
  • a步骤结束后,您将使用新的活动列表而不是上一个列表重新开始
  • 当其中一个为1时,算法结束。列表为空,2。您可以找到
    (x1,y1)
    。在最后一种情况下,有一条路径,可以按照保存的链接重建最短的路径
假设你的“图形”确实是一张地图,当单元格相邻时,你只能停留在
true
单元格上移动,那么一个简单的算法基于泛洪填充思想:

  • 创建一个点的“活动列表”,仅在其中放置
    (x0,y0)
  • 在每一个“步骤”中,你都要考虑活跃列表中某个点的所有邻居,如果邻居可以继续走,而且还没有被访问,那么你就把它链接到你来自的单元,并把它标记为访问。您链接的所有点也将添加到“新活动列表”集合中
  • a步骤结束后,您将使用新的活动列表而不是上一个列表重新开始
  • 当其中一个为1时,算法结束。列表为空,2。您可以找到
    (x1,y1)
    。在最后一种情况下,有一条路径,可以按照保存的链接重建最短的路径
假设你的“图形”确实是一张地图,当单元格相邻时,你只能停留在
true
单元格上移动,那么一个简单的算法基于泛洪填充思想:

  • 创建一个点的“活动列表”,仅在其中放置
    (x0,y0)
  • 在每一个“步骤”中,你都要考虑活跃列表中某个点的所有邻居,如果邻居可以继续走,而且还没有被访问,那么你就把它链接到你来自的单元,并把它标记为访问。您链接的所有点也将添加到“新活动列表”集合中
  • a步骤结束后,您将使用新的活动列表而不是上一个列表重新开始
  • 当其中一个为1时,算法结束。列表为空,2。您可以找到
    (x1,y1)
    。在最后一种情况下,有一条路径,可以按照保存的链接重建最短的路径

该数组中的布尔表示什么?@JohnKugelman,不太重要。“距离”表示的字段是“空”还是“满”,您是指边数吗?那么从[2][1]到[5][0]的距离是4?@Beta no!我的意思是从用户的输入中得到的距离。为了表示距离,您不使用int吗?(如果需要分别表示水平距离和垂直距离,可以是两个。)如果布尔值不表示与距离相关的任何东西,那么距离不是简单的x1-x0,y1-y0吗?宽度优先搜索不会给你带来任何好处。数组中的布尔值代表什么?@JohnKugelman,不太重要。“距离”表示的字段是“空”还是“满”,您是指边数吗?那么从[2][1]到[5][0]的距离是4?@Beta no!我的意思是从用户的输入中得到的距离。为了表示距离,您不使用int吗?(如果需要分别表示水平距离和垂直距离,可以是两个。)如果布尔值不表示与距离相关的任何东西,那么距离不是简单的x1-x0,y1-y0吗?宽度优先搜索不会给你带来任何好处。数组中的布尔值代表什么?@JohnKugelman,不太重要。那是五吗