poj 2387 Til the Cows Come Home (最短路,dijkstra模版题)

题目

#define  _CRT_SECURE_NO_WARNINGS

#include<string.h>
#include<stdio.h>
#include<math.h>

const int MAXN=1010;  

#define typec int  
const typec INF=0x3f3f3f3f;//防止后面溢出,这个不能太大  
bool vis[MAXN];  
int pre[MAXN];
typec cost[MAXN][MAXN];
typec lowcost[MAXN];
void Dijkstra(int n,int beg)  
{  
    for(int i=1;i<=n;i++)  
    {  
        lowcost[i]=INF;vis[i]=false;pre[i]=-1;  
    }  
    lowcost[beg]=0;  
    for(int j=1;j<=n;j++)  
    {  
        int k=-1;  
        int Min=INF;  
        for(int i=1;i<=n;i++)  
            if(!vis[i]&&lowcost[i]<Min)  
            {  
                Min=lowcost[i];  
                k=i;  
            }  
        if(k==-1)break;  
        vis[k]=true;  
        for(int i=1;i<=n;i++)  
            if(!vis[i]&&lowcost[k]+cost[k][i]<lowcost[i])  
            {  
                lowcost[i]=lowcost[k]+cost[k][i];  
                pre[i]=k;  
            }  
    }  
}  

int main()
{
    int n,i,j,t,a,b,c;
    while(scanf("%d%d",&t,&n)!=EOF)
    {
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                cost[i][j]=(i==j)? 0:INF;

        for(i=0;i<t;i++)
        {
            scanf("%d%d%d",&a,&b,&c);
            if(cost[a][b]>c)
                cost[a][b]=cost[b][a]=c;
        }
        Dijkstra(n,n);
        printf("%d
",lowcost[1]);
    }
    return 0;
}
View Code
一道又一道,好高兴!
原文地址:https://www.cnblogs.com/laiba2004/p/3541990.html