图论的一些算法
namespace FloydNS { //
/**/ /* 解决:所有点对最短路径
*算法:Floyd——O(V^3)
*输入:加权连通图(矩阵):g
*输出:最短距离长度矩阵d[][], 路径矩阵p[][]
*/
GraphMatrix g;
double d[maxV][maxV]; // 最短路径长度
int p[maxV][maxV]; // 最短路径下一顶点
void floyd() {
int i,s,t;
for (s = 0 ; s < g.v; ++ s) {
for (t = 0 ; t < g.v; ++ t)
if ( (d[s][t] = g.a[s][t]) < Inf)
p[s][t] = t;
d[s][s] = 0 ;
}
for (i = 0 ; i < g.v; ++ i)
for (s = 0 ; s < g.v; ++ s)
if (s != i && d[s][i] < Inf)
for (t = 0 ; t d[s][i] + d[i][t]) { [Page]
d[s][t] = d[s][i] + d[i][t];
p[s][t] = p[s][i];
}
}
}
2021-05-22 13:31:15
39KB
图论
1