-
问题
用Floyd算法求解下图各个顶点的最短距离。
-
Floyd算法生成最短距离过程
初始化
加入顶点1
加入顶点2
加入顶点3
加入顶点4
-
设计
void Floyd(vector<vector<int>> &graph){
int size = graph.size();
for (int k = 0; k < size; k++) //加入v0时,判断能通过v0连接的点
{ //需更新权值
for (int i = 0; i < size; i++)//加入v1时,判断能通过v1或v1,v0的点是否需要更新权值
//加入v2时,判断能通过v2或v1,v2或v0,v1,v2的点是否需要更新权值
{
for (int j = 0; j < size; j++)//更新权值
{
if (graph[i][j] > graph[i][k] + graph[k][j])
{
graph[i][j] = graph[i][k] + graph[k][j];
}
}
}
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
cout << setw(6) << graph[i][j] << " ";
}
cout << endl;
}
}
4.分析
时间复杂度O(n^3)
5.源码
https://github.com/samfsrhv920/algorithm-analysis