floyd算法
蓝桥杯中,有时也会要求图中任意点的最短路径,这时候虽然可以用dijkstra,但是代码长,用floyd是最短的。模板如下。
模版
时间复杂度O(n^3)
使用邻接矩阵存储图
初始化: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]);
}