#include<stdio.h>
#include<string.h>
int main()//无向图1到各个顶点的最小距离
{
int mp[101][101],m,n,a,b,c,dis[101],vis[101],xx=0;
memset(dis,0x3f3f3f3f,sizeof(dis));
memset(vis,0,sizeof(vis));
memset(mp,0,sizeof(mp));
scanf("%d%d",&m,&n);
for(int i=0;i<m;i++){
scanf("%d%d%d",&a,&b,&c);
mp[a][b]=c;
if(a==1){
dis[b]=c;
}else if(b==1){
dis[a]=c;
}
}
while(1){
int sum=0x3f3f3f3f,temp;
for(int i=2;i<=m;i++){
if(vis[i]==0&&dis[i]<sum){
sum=dis[i];
temp=i;
}
}
if(sum==0x3f3f3f3f){
break;
}
vis[temp]=1;
for(int i=2;i<=m;i++){
if(mp[temp][i]+sum<dis[i]&&mp[temp][i]!=0){
dis[i]=mp[temp][i]+sum;
}
if(mp[i][temp]+sum<dis[i]&&mp[i][temp]!=0){
dis[i]=mp[i][temp]+sum;
}
}
}
printf("0\n");
for(int i=2;i<=m;i++){
printf("%d\n",dis[i]);//输出1到每个点的距离
}
return 0;
}
dijistra
最新推荐文章于 2022-09-01 20:01:20 发布