最短路 Dijkstra

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
int n,m,INF=99999999;
int e[1001][1001],road[1001],jdg[1001];
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            if(i==j) 
                e[i][j]=0;
            else 
                e[i][j]=INF;
        }
    for(int i=1;i<=m;i++)
    {
        int a,b,c;
        cin>>a>>b>>c;
        e[a][b]=c;
    }
    for(int i=1;i<=n;i++)
        road[i]=e[1][i];
    jdg[1]=1;
    for(int i=1;i<=n-1;i++)
    {
        int min=INF,u;
        for(int j=1;j<=n;j++)
            if(jdg[j]==0&&road[j]<min)
            {
                min=road[j];
                u=j;
            }
        jdg[u]=1;
        for(int j=1;j<=n;j++)
            if(e[u][j]<INF&&road[j]>road[u]+e[u][j])
                road[j]=road[u]+e[u][j]; 
    }
    for(int i=1;i<=n;i++)
        cout<<road[i]<<" ";
    cout<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/water-radish/p/9280680.html