我需要找到图形中出现在从第一个顶点到最后一个顶点的每个路径中的最少边数。例如 - 在图像中,如果第一个顶点是V0,最后一个顶点是V8,那么从V0到V8的每个路径中出现的最少顶点数是2,它们是绿色的(或代替V6-V8)可能是V0-V3或V3-V6)。
示例图片:
已经搜索了一段时间但却无法找到(或想到)任何算法来执行此操作...
答案 0 :(得分:0)
您的问题相当于在图表中找到最小的s-t切割,因为此切割提供了最小的边缘集合,如果删除,则断开s和t。这与说每条路径在最小切割中经过一些边缘相同。
有许多算法可以找到最小的s-t切割。例如,max-flow min-cut theorem表示从s到t的最大值的流量(如果每个边具有单位容量)具有与最小s-t切割中的边数相同的流量。因此,任何最大流量算法,如Ford-Fulkerson或Edmonds-Karp,都可用于直接计算最小切割成本。从那里,通过找到残差图中s可到达的所有边缘并且获取在该集合中具有一个端点并且在补集中具有另一个端点的所有边缘,可以容易地恢复最小切割。
希望这有帮助!