您的位置:首页 > 其它

hdu2544

2015-07-28 15:14 239 查看
第二发最短路dijkstra

#include<stdio.h>
#include<math.h>
#define max 10000000
int a,b,m,i,j,k,n,x;
int dis[500],c[500][500];
void dijkstra(int star,int end,int c[500][500],int dis[])
{
int w[500]={0},v;
dis[star]=0;
for(i=1;i<=n;i++)
{
if(c[star][i]!=max)
dis[i]=dis[star]+c[star][i];
}
w[star]=1;
for(i=1;i<=n;i++)
{
int tem=max;
for(j=1;j<=n;j++)
{
if(w[j]==0&&dis[j]<tem)
{
tem=dis[j];
v=j;
}
}
w[v]=1;
for(j=1;j<=n;j++)
{
if(dis[j]>dis[v]+c[v][j])
dis[j]=dis[v]+c[v][j];
}
}
printf("%d\n",dis[end]);
}
int main()
{
while(scanf("%d %d",&n,&m)!=EOF)
{
if(n==0&m==0)break;
for(i=1;i<=n;i++)
dis[i]=max;
for(i=1;i<=n;i++)
for(k=1;k<=n;k++)
c[i][k]=max;
for(i=1;i<=m;i++)
{
scanf("%d %d %d",&a,&b,&x);
if(c[a][b]>x){
c[a][b]=x;
c[b][a]=x;
}
}
dijkstra(1,n,c,dis);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: