HDU 2544 最短路

简单的dijkstra算法题吐舌头


#include<cstdio>
#include<iostream>
using namespace std;
#define INF 999999999
#define Max 105
int path[Max][Max];
int d[Max];
int n;
void Init()
{
	int i,j;
	for(i=1;i<Max;i++)
		for(j=1;j<Max;j++)
		path[i][j]=INF;
}

void dijkstra(int v)
{
	bool s[Max]={false};
	int i,j;
    
	for(i=1;i<=n;i++)
		d[i]=path[v][i];
	d[v]=0;s[v]=true;
	for(i=1;i<=n;i++)
	{
		
		int temp=INF;
		int u=v;
		for(j=1;j<=n;j++)
			if(!s[j]&&d[j]<temp)
			{
				u=j;
				temp=d[j];
			}
			s[u]=true;
			for(j=1;j<=n;j++)
				if(!s[j]&&path[u][j]<INF&&(d[j]>d[u]+path[u][j]))
					d[j]=d[u]+path[u][j];
				
	}	
}
int main()
{ 
	int i,m,a,b,c;
	while(scanf("%d%d",&n,&m)!=EOF&&(n||m))
	{
		
		Init();
		for(i=0;i<m;i++)
		{
			scanf("%d%d%d",&a,&b,&c);
			if(path[a][b]>c)
			{
			  path[a][b]=c;
			  path[b][a]=c;
			}
		}
		dijkstra(1);
		printf("%d\n",d[n]);
	}
	return 0;
}


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