图论之最短路算法

Floyd

#include <cstdio>
待补坑

Dijkstra

朴素o(n^2)

int n, m;// 点数量以及边数量
int w[MAXN][MAXN];// 记录任意两点之间距离
int d[MAXN];// 点的权值
int v[MAXN];// 标记数组
void Dijkstra() {
    // 初始化所有点权为INF
    for(int i=2; i<=n; i++) d[i] = INF;

    for(int i=1; i<=n; i++) {
        int x, m = INF;
        // 选出相连的d值最小的点
        for(int y=1; y<=n; y++) if(!v[y] && d[y]<=m) m = d[x=y];
        // 标记此点为已访问
        v[x] = true;
        // 更新最小d值
        for(int y=1; y<=n; y++) {d[y] = min(d[y], d[x] + w[x][y]);}

    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容