floyd算法的核心步骤是什么?
相信学习过的人都觉得很简单。
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]);
}
这个算法的三重循环,内部两重循环很好理解,就是不断遍历存储在邻接矩阵中的每一个点,那么最外层的k循环是用来干什么的呢?
很简单,就是用来遍历每一个点,看是否能有中转点用来更新距离,使得距离最小化。每一次都是前k个点,看能否有更新减少最低距离的数据。也就是说,如果这N个点中有的点在特定时间不能用,就不能用来更新最短距离,是否发现了什么》?
没错,就是和这道题目对应的。