POJ 2387

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<string.h>
using namespace std;

const int maxn=1005;
const int inf = 0x3f3f3f3f;
int mapp[maxn][maxn];
int dis[maxn];
int vis[maxn];
int a,b,c,n,m;
int minx;

void dijkstra(int x)
{
	for(int i=1;i<=n;i++)
	{
		dis[i]=mapp[1][i];
		vis[1]=1;
	}
	for(int i=1;i<=n;i++)
	{
		int k=0;
		minx=inf;
		for(int j=1;j<=n;j++)
		{
			if(!vis[j]&&dis[j]<minx)
			{
				k=j;
				minx=dis[j];
			}
		}
		vis[k]=1;
		for(int j=1;j<=n;j++)
		{
			if(!vis[j]&&dis[j]>dis[k]+mapp[k][j])
			{
				dis[j]=dis[k]+mapp[k][j];
			}
		}
	}
}
int main()
{
	scanf("%d %d",&m,&n);
	memset(mapp,inf,sizeof(mapp));
	memset(dis,0,sizeof(dis));
	memset(vis,0,sizeof(vis));
	for(int i=1;i<=m;i++)
	{
		scanf("%d %d %d",&a,&b,&c);
		if(c<mapp[a][b])
		{
			mapp[a][b]=c;
			mapp[b][a]=mapp[a][b];
		}
	
	}
	dijkstra(n);
	printf("%d\n",dis[n]);
	return 0;
}
posted @ 2020-10-07 19:55  天明天明  阅读(57)  评论(0编辑  收藏  举报