【博客】最短路径算法

Floyd

时间复杂度\(O(n^3)\) 空间复杂度\(O(n^2)\)
可求出每对节点间的最短路
事实上,floyd是基于动态规划实现的
\(f[k][i][j]\)表示经过前\(k\)个节点,从\(i\)\(j\)的最短路径
可得\(f[k][x][y] = min(f[k-1][x][y], f[k-1][x][k]+f[k-1][k][y])\)
其中\(f[k-1][x][y]\)为不经过\(k\)点的最短路径
\(f[k-1][x][k]+f[k-1][k][y]\),为经过了 k 点的最短路)
然后把第一维优化掉

#include<bits/stdc++.h>

using namespace std;

const int maxn=100;
int n;
int a[maxn][maxn];

int main() {
    for (int k = 0; k < n; k++) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                a[i][j] = min(a[i][j], a[i][k] + a[k][j]);
            }
        }
    }
    return 0;
}
posted @ 2024-04-11 15:43  zysssss  阅读(8)  评论(0编辑  收藏  举报