poj 2387 Til the Cows Come Home

#include <stdio.h>
#include <string.h>
#define INF 100000000
int e[1001][1001],s[1001],d[1001];
int m,n;
void dijkstra(int u)
{
    int i,j,k;
    for(i=1;i<=n;i++)
    {
        d[i]=e[u][i];
        s[i]=0;
    }
    s[u]=1;
    d[u]=0;
    for(i=1;i<n;i++)
    {
        int v,min=INF;
        for(j=1;j<=n;j++)
        {
            if(s[j]==0&&min>d[j])
            {
                min=d[j];
                v=j;
            }
        }
        s[v]=1;
        for(k=1;k<=n;k++)
        {
            if(s[k]==0&&e[v][k]+d[v]<d[k])
            d[k]=e[v][k]+d[v];
        }
    }
}
int main()
{
    while(scanf("%d%d",&m,&n)!=EOF)
    {
        int i,j,k;
        for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        if(i==j)
        e[i][j]=0;
        else
        e[i][j]=INF;
        int a,b,c;
        for(i=0;i<m;i++)
        {
            scanf("%d%d%d",&a,&b,&c);
            if(c<e[a][b])    //!!!!!!!!!!
            e[a][b]=e[b][a]=c;
        }
        dijkstra(n);
        printf("%d\n",d[1]);
    }
    return 0;
}
//基础最短路径,dijkstra

你可能感兴趣的:(最短路径)