2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0
3 2
代码:
#include<stdio.h>
#include<string.h>
#define INF 0x3f3f3f
int map[110][110],vis[110],low[110];
int n,m;
int init() //初始化;
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j)
map[i][j]=0;
else
map[i][j]=INF;
}
}
}
int dijkstra()
{
int i,j,min,next;
memset(vis,0,sizeof(vis));
for(i=1;i<=n;i++)
{
low[i]=map[1][i];
}
vis[1]=1;
for(i=2;i<=n;i++)
{
min=INF;
for(j=1;j<=n;j++)
{
if(!vis[j]&&min>low[j])
{
next=j;
min=low[j];
}
}
vis[next]=j;
for(j=1;j<=n;j++) //更新low ;
{
if(!vis[j]&&low[j]>map[next][j]+low[next])
{
low[j]=map[next][j]+low[next];
}
}
}
printf("%d\n",low[n]);
}
int main()
{
int i,j,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(map[a][b]>c) //去重边;
{
map[a][b]=map[b][a]=c;
}
}
dijkstra();
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/longge33445/article/details/47726195