我需要找到一个算法来找到从v_s到v_t的最短路径,在无向图G1中以随机方式着色为绿色和黑色,我必须传递至少一个绿色边缘。
我的解决方案(不确定最好的解决方案):
答案 0 :(得分:0)
我的方法是运行双向Dijkstra搜索,然后只允许每个搜索的一个分支在至少一个分支包含绿色边缘时相遇。
这与您自己的方法类似,但不需要将图形复制到G2中。
答案 1 :(得分:0)
你的解决方案很棒,但我会使用Dijstra的算法而不是BFS。它通常效率更高,但这取决于数据,因为在最坏的情况下,它可以像BFS一样进行搜索,但需要支付优先级队列的额外开销。
另一个不错的解决方案,即修正本杰明的解决方案
两次运行Dijstras的单源最短路径,一次来自源,一次来自目标
穿过所有绿色边缘。对于每个,将来自源的路径和来自目标的路径相加。 选择最短的那些。
这个解决方案对我来说比你更直观,但是我没有看到一个优于另一个的真正优势。