LeeBlog

导航

HDU 2544 最短路

#include<stdio.h>
int inf = 0x7fffffff;
int map[110][110],des[110],dis[110],n,m;//dis[i]表示i点到原点的距离
void dij( )//des作为标记符
{
dis[
1] = 0;
for( int i = 1; i <= n; ++i )
{
int min = inf,pos = 0;
for( int j = 1; j <= n; ++j )//找到当前未标记的权值最小的点
if( !des[j] && dis[j] < min )
{
min
= dis[ j ];
pos
= j;
}
des[pos]
= 1;
if( des[n] )
return ;
for( int j = 1; j <= n; ++j ) //将当前最短点与其他点连起来
{
if( !des[j] && map[pos][j] != inf && map[pos][j] + dis[pos] < dis[j] )
dis[j]
= map[pos][j] + dis[pos];
}
}
}
int main( )
{
while( scanf( "%d%d",&n,&m ) , ( n | m ) )
{
for( int i = 1;i <= n; ++i )//初始化
{
for( int j = 1; j <= n; ++j )
map[i][j]
= inf;
dis[i]
= inf;
des[i]
= 0;
}
for( int i = 1; i <= m; ++i )
{
int x,y,val;
scanf(
"%d%d%d",&x,&y,&val );
map[x][y]
= map[y][x] = val;
}
dij( );
printf(
"%d\n",dis[n] );
}
return 0;
}
这题是Dijkstra的算法应用,比较基本

posted on 2011-03-05 14:32  LeeBlog  阅读(185)  评论(0编辑  收藏  举报