floyd 算法主要解决:
有负权边的有向图或者无向图的两两节点之间的最短路。
如果存在有G[i][i]是负数,那么说明有负权环。
可以理解为最多k圈,每次更新至少能求出来一圈最短路。
int G[maxn][maxn], n;
void init(){
for(int i = 0 ; i <= n; ++i)
for(int j = 0; j <= n; ++j)
G[i][j] = (i==j) ? 0 : INF;
}
void floyd(){
for(int k = 1; k <= n; ++k)
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
G[i][j] = min(G[i][j], G[i][k]+G[k][j]);
}