Dijkstra

作者: 滑二稽 | 来源:发表于2017-06-11 13:26 被阅读46次
#include <stdio.h>
#define MAXN 100
#define inf 1000.0

double dist[MAXN];
int p[MAXN];
void dijk(int u, double C[MAXN][MAXN], int n){
    bool s[MAXN] = {false};

    for(int i = 0; i < n; i++){
        dist[i] = C[u][i];
        if(dist[i] >= inf)  p[i] = -1;
        else  p[i] = u;
    }

    dist[u] = 0;
    s[u] = true;

    for(int i = 0; i < n; i++){
        double tmp = inf;
        int t = u;
        for(int j = 0; j < n; j++)
        if(!(s[j]) && (dist[j] < tmp)){
            t = j;
            tmp = dist[j];
        }

        if(t == u)  break;
        s[t] = true;

        for(int j = 0; j < n; j++)
        if(!(s[j]) && (C[t][j] < inf) && (dist[j] > dist[t] + C[t][j])){
            dist[j] = dist[t] + C[t][j];
            p[j] = t;
        }
    }
}

int main(){
    double C[MAXN][MAXN];
    int n;
    scanf("%d", &n);
    for(int i = 0; i < n; i++)
        for(int j = 0; j < n; j++)
            scanf("%lf", C[i]+j);

    dijk(0, C, n);

    for(int i = 0; i < n; i++)
        printf("%.4f\t", dist[i]);
    printf("\n");
    for(int i = 0; i < n; i++)
        printf("%d\t", p[i]);

    return 0;
}

相关文章

  • Dijkstra

    Dijkstra Conception Dijkstra is a single source shortest ...

  • 最短路径模板

    堆优化的Dijkstra 普通Dijkstra SPFA

  • 图算法(二)最短路

    本文将介绍三种常见的最短路算法:Dijkstra,Floyd,SPFA Dijkstra Dijkstra是有向图...

  • 图的最短路径

    Dijkstra算法&Floyd算法 一、Dijkstra算法 Dijkstra算法思想: 只计算v0出发到其他顶...

  • 深入解析Dijkstra's Algorithm ——

    什么是Dijkstra算法? Dijkstra算法是用来寻找最短路径最著名的算法之一。具体来说,Dijkstra算...

  • 算法模板(三)最短路问题

    Dijkstra SPFA Floyd

  • DFS BFS

    BFS DFS Dijkstra

  • ——Dijkstra

    dijkstra由于是贪心的,每次都找一个距源点最近的点(dmin),然后将该距离定为这个点到源点的最短路径。但如...

  • Dijkstra

  • Dijkstra

    1.问题 单源最短路径 2 最短路径数组就是当前各个节点到A的距离前驱数组就是相应距离的前一个节点 此时在V-S中...

网友评论

      本文标题:Dijkstra

      本文链接:https://www.haomeiwen.com/subject/cpyhqxtx.html