POJ-2387-Til the Cows Come Home

这个题就是一个裸地求N到1的最短路径,比较简单

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=2100;
const int inf=1<<29;
int n,m,map[maxn][maxn],dist[maxn];
bool vis[maxn];
int Dijstra(int st)
{
    memset(vis,0,sizeof(vis));
    for(int i=1;i<=n;i++)
	dist[i]=map[st][i];
    vis[st]=1;
    dist[st]=0;
    for(int i=0;i<n-1;i++)
    {
	int mini=inf,pos=i;
	for(int j=1;j<=n;j++)
	    if(!vis[j]&&dist[j]<mini)
	    {
		mini=dist[j];
		pos=j;
	    }
	vis[pos]=1;
	for(int j=1;j<=n;j++)
	{
	    if(vis[j])
		continue;
	    dist[j]=min(dist[j],dist[pos]+map[pos][j]);
	}
    }
    return dist[1];
}
int main()
{
    while(scanf("%d%d",&m,&n)!=EOF)
    {
	memset(map,0x7f,sizeof(map));
	for(int i=0;i<m;i++)
	{
	    int a,b,c;
	    scanf("%d%d%d",&a,&b,&c);
	    map[a][b]=min(map[a][b],c);
	    map[b][a]=min(map[b][a],c);
	}
	printf("%d\n",Dijstra(n));
    }
    return 0;
}


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