最短路问题!
最简单的最短路问题!
恩!
#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
",Dijsktra(start));
else
printf("-1
");
}
return 0;
}
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874