错误总结
- 初始化忘记初始化
- 那个最后是
d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
不是d[i][j] = d[i][k] + d[k][j];
有一个min的过程,不是直接搞啊!!
初始化:
把自己赋值为0,其他的位置赋值为INF(1e9)
思想是一个类似动态规划的思想,三层循环k,i,j
初始化:
for (int i = 1; i <= n; i ++ )
for (int j = 1; j <= n; j ++ )
if (i == j) d[i][j] = 0;
else d[i][j] = INF;
// 算法结束后,d[a][b]表示a到b的最短距离
void floyd()
{
for (int k = 1; k <= n; k ++ )
for (int i = 1; i <= n; i ++ )
for (int j = 1; j <= n; j ++ )
d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}