思想
如果存在顶点k,使得以k作为中介点,从i到j的当前最短路径缩短,则使k作为i和j的中介点,即当dis[i][k]+dis[k][j] < dis[i][j]时,令dis[i][j]=dis[i][k]+dis[k][j]。
注:dis[i][j]表示从i到j的最短路径,初始化dis[i][i]=0。
const int INF = 10000000;//表示不可达
void Floyd() {
for (int v = 0; v < n; ++v) { //枚举所有顶点作为中介点
//由将v作为由i到j的边的中介点,遍历所有的边
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
if (dis[i][v] != INF && dis[v][j] != INF && dis[i][j] > dis[i][v] + dis[v][j])
dis[i][j] = dis[i][v] + dis[v][j];
}
}
}
}