Floyd
是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法
关键代码
vector<vector<int>> Floyd(vector<vector<int>> matrix) {
vector<vector<int>> m = matrix; //matrix是邻接矩阵,m为matrix的复制
vector<vector<int>> s(matrix.size(),vector<int>(matrix.size())); //s是最短路径矩阵
for (int i = 0; i < s.size(); i++) { //双层循环赋值,初始值为列值,对角线上值为-1
for (int j = 0; j < s.size(); j++) {
if (i != j)s[i][j] = j;
else s[i][j] = -1;
}
}
for (int i = 0; i < m.size(); i++) { //第一层循环为研究两点路径间经过i点是否距离更短
for (int j = 0; j < m.size(); j++) { //第二层循环为起点j
for (int k = 0; k < m.size(); k++) { //第三层循环为终点k
if (m[j][k] > m[j][i] + m[i][k]) { //如果发现当前两点间距离大于经过i点再到达终点的距离
m[j][k] = m[j][i] + m[i][k]; //更新两点间距,m[j][k]为j到k的距离,s[j][k]为j到k要先经过的点
s[j][k] = i; //更新路径,j到k要先经过i
}
}
}
}
return s;
}