在图中找到最短路径

计算科学 算法 C 图论
2021-12-07 08:10:07

如果图的每条边G未加权或具有相同权重,则该图中两个节点之间的最短路径是包含最少边数的路径。这样的路径可以通过 BFS 获得。在这里,我认为边的每个权重是末端顶点的最小值,路径的权重是边权重的总和除以路径上的边数。我无法将 BFS 用于此类算法。请建议我一个合适的已知算法来解决这个问题。我也想知道我是否可以在 C++ 中使用合适的编程代码来解决这样的问题?以下问题是手动解决的,但我希望通过使用一些已知的算法或编程代码来解决它。我对 C 编程和这个站点都是新手,所以如果我的问题离题,请给我推荐一个合适的站点。谢谢, 在此处输入图像描述

注 1上述问题只需手动解决。相反,我想在 C++ 中使用合适的已知算法或编程代码来解决这个问题。我刚刚安装了 Dev-C++ 来试试。 注 2这里,图表G是完整的(除了边缘(0,6)被删除)有0作为源顶点和6作为目标顶点。

1个回答

根据提供的描述和图,您有一个无向图,手头有一个源和一个接收器。最著名的选择是实现Dijkstra 算法还有其他更快的选项,但只要您处理小型实例并且没有 CPU 时间限制,我认为您可以继续使用。如果您有兴趣,维基百科有一些其他选项的列表,可从此处获得。

至于实现,网络上有很多可用的代码(一些示例可从此处此处获得,但您也可能会找到其他实现)。此外,如果您有兴趣学习如何编写这些算法,一个很好的起点是研究您选择的算法的代码(有关 Dijkstra 算法的伪代码,请参见此处)。

附言。如果您需要找到所有节点对之间的最短路径,您可以尝试使用Floyd–Warshall 算法