可以解决负权图,适用稠密图和顶点关系密切;
松弛操作:通过经过其他点来更新最短距离;
其实Floyd就是不断通过松弛操作来更新最短距离,经过一个点更新任意两点间的最短距离,经过两个点更新任意两点间的最短距离,经过N个点更新任意两点间的最短距离;
1.利用二维数组存图
先初始化数组再赋值
for (i = 1; i <= n;i++)
for (j = 1; j <= n; j++)
{
if (i == j)
map[i][j] = 0;
else
map[i][j] = INF;
}
for (i = 1; i <= m; i++)
{
scanf("%d %d %d", &a, &b, &c);
if (map[a][b] > c) //判断重边
map[a][b] = map[b][a] = c;
}
2.floyd的三行循环
for (k = 1; k <= n;k++)
for (i = 1; i <= n;i++)
for (j = 1; j <= n;j++)
if (map[i][j] > map[i][k] + map[k][j])
map[i][j] = map[i][k] + map[k][j];