#include <stdio.h>
#include<string.h>
#define max 1009
#define MAX 100000000
int map[max][max];
int d[max][max];
int main(int argc, char *argv[])
{
int n,m,i,j,k,s,t;
int mx;
int a,b,c;
while(scanf("%d%d%d",&n,&m,&s)!=EOF){
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i==j)
map[i][j]=0;
else
map[i][j]=MAX;
while(m--){
scanf("%d%d%d",&a,&b,&c);
if(c<map[a][b])
map[a][b]=c;
}
scanf("%d",&t);
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(map[i][j]>map[i][k]+map[k][j])
map[i][j]=map[i][k]+map[k][j];
int p;
mx=max;
while(t--){
scanf("%d",&p);
if(map[p][s]<mx)
mx=map[p][s];
}
if(mx<max)
printf("%d\n",mx);
else
printf("-1\n");
}
return 0;
}
本文介绍了一个使用Floyd算法解决最短路径问题的C程序。该程序通过读取顶点数、边数及边的权重来构造加权图,并利用Floyd算法计算任意两点间的最短路径。特别关注了如何更新路径矩阵以反映最短路径。
303

被折叠的 条评论
为什么被折叠?



