我可以使用哪种算法查找图中最短路径的旁边?

Vim*_*deo 16 algorithm graph

我想找到图中2个顶点之间的下一个最短路径,并且路径具有正成本.允许下一条最短路径共享最短路径的边缘.我可以使用哪种算法?

Wei*_*Wei 15

使用K-shortest路径算法,其中k = 2,一些示例参考:

找到k个最短路径.D.埃普斯坦.第35届IEEE Symp.Comp的基础 Sci.,Santa Fe,1994,pp.154-165.技术.Rep.94-26,ICS,UCI,1994.SiAM J.Computing 28(2):652-673,1998.

http://www.ics.uci.edu/~eppstein/pubs/Epp-TR-94-26.pdf

  • 该算法实际上非常简单,无需阅读20页:https://en.wikipedia.org/wiki/K_shortest_path_routing#Algorithm (2认同)

tke*_*win 13

我怀疑这在运行时间方面是最佳的,但是:

  1. 在图G上使用Dijkstra算法得到路径P.
  2. 对于路径P中的所有边E:
  3. - 如果没有连接G-E,继续下一个边缘(转到2)
  4. - 在G-E上使用Dijkstra算法来找到路径X_i
  5. - 如果当前X_i的长度短于所有其他X_i,请保存
  6. for循环结束时的X_i是第二个最短路径

第二个最短的路径不能通过P中的所有边缘,但它可能会经历除了其中一个之外的所有边缘.我假设"第二短"你不会多次使用边缘,否则第二短路径可能包含P.

  • 我认为算法中存在错误:即使不使用相同的边缘两次,您也可以拥有包含最短路径的第二条最短路径.考虑图:V = {s,m,t},E = {s - > m,m - > t,m - > m},以及为所有边分配1的权重函数.s和t之间的最短路径是:s - > m - > t,第二条最短路径是:s - > m - > m - > t.你的算法不会捕获它. (11认同)
  • @Guy据我记得,根据定义,一条路径不能两次通过同一顶点。 (2认同)