HDOJ 2544 最短路

题目链接:~( ̄▽ ̄~)(~ ̄▽ ̄)~



code:

#include <stdio.h>
#include <string.h>
#define Max 0xfffffff
int n = 0,  m = 0, map[102][102], dis[102], used[102];
void dijskstra()
{
	int i = 0, j = 0, k = 0, min = 0;
	for(i = 2; i<=n; i++)//初始化1到每点的距离
		dis[i] = map[i][1];
	for(i = 1; i<n; i++)
	{
		min = Max;
		for(j = 2; j<=n; j++)//选出最短的距离
			if(dis[j]<min && !used[j])
			{
				min = dis[j];
				k = j;
			}
		used[k] = 1;//标记
		for(j = 2; j<=n; j++)//更新选出的这个节点, 第一个点通过这个节点到其他节点的距离
		{
			if(!used[j])
				if(dis[j]>dis[k]+map[k][j])
					dis[j] = dis[k]+map[k][j];
		}
	}
}
int main()
{
	int i = 0, j = 0, a = 0, b = 0, time = 0;
	while(scanf("%d %d",&n,&m) , (n || m))
	{
		for(i = 1; i<=n; i++)
		for(j = 1; j<=n; j++)
		map[i][j] = Max;
		while(m--)
		{
			scanf("%d %d %d",&a,&b,&time);
			map[a][b] = map[b][a] = time;
		}
		memset(used,0,sizeof(used));
		used[1] = 1;
		dijskstra();
		printf("%d\n",dis[n]);
	}
	return 0;
}


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