有向图G中可能存在负边,但不存在负边灰回路,此时求G上任意两点间的最短距离,可以用Floyd算法。W[i][j]代表i到j的边权值,如果i==j,则W[i][j]=0,如果i和j之间没有边,则W[i][j]=infinite。节点记号为1->n。
构造d[k][i][j],它代表当从i到j的最短路径中所包含中间节点只能落在1->k时,所得最短路径长度。
递推式:
最终d[n][i][j]极为i到j的最短路径(因为它考虑了中间节点为1->n的所有情况)。
构造p[k][i][j],它代表当从i到j的最短路径中所包含中间节点只能落在1->k时,j的前序节点。
初始时,当i==j时,p[0][i][j]=-1;当i到j没有边时,p[0][i][j]=-1;当i到j有边时,p[0][i][j]=i。
当k>0时,递推式:
最终最短路径可以由p[n][i][j]获得。
伪代码:
floyd算法,求任意点间最短距离
最新推荐文章于 2023-12-06 09:50:17 发布