hdu 1874 畅通工程续(最短路)

时间:2023-11-17 10:24:50

最短路问题!

最简单的最短路问题!

恩!

#include<stdio.h>

#define MAX 1000000

int map[500][500];

int n,m,start,end;

int dist[500];

int s[500];

int Dijsktra(int start)

{


int i,j,mindis,u;


for(i=0;i<n;i++)


{


s[i]=0;


dist[i]=map[start][i];


}


s[start]=1;dist[start]=0;


for(i=0;i<n;i++)


{


mindis=MAX;


for(j=0;j<n;j++)


if(s[j]==0&&dist[j]<mindis)


{


mindis=dist[j];


u=j;


}


s[u]=1;


for(j=0;j<n;j++)


if(s[j]==0&&map[u][j]<MAX)


if(dist[u]+map[u][j]<dist[j])


{


dist[j]=dist[u]+map[u][j];


}


}


return dist[end];

}

int main()

{


int i,j,a,b,c;


while(scanf("%d%d",&n,&m)!=EOF)


{


for(i=0;i<n;i++)


for(j=0;j<n;j++)


{


map[i][j]=MAX;


}


for(i=0;i<m;i++)


{


scanf("%d%d%d",&a,&b,&c);


if(c<map[a][b])


{


map[a][b]=c;


map[b][a]=c;


}


}


scanf("%d%d",&start,&end);


if(Dijsktra(start)!=MAX)


printf("%d\n",Dijsktra(start));


else


printf("-1\n");


}


return 0;

}

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874