Sample Input
6 2 3
1 3 5
1 4 7
2 8 12
3 8 4
4 9 12
9 10 2
1 2
8 9 10
Sample Output
9
思路:同样用弗洛伊德(Floyd)算法。起点和终点不再单一。
代码:
#include <stdio.h>
#include <string.h>
#define maxn 1002
#define INF -1
int map[maxn][maxn];
void Floyd(int n)
{ int i, j, k;
for(k=0;k<=n;k++)
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
if(map[i][k]!=1&&map[k][j]!=1&&(map[i][k]+map[k][j]<map[i][j]||map[i][j]==1))
{
map[i][j]=map[i][k]+map[k][j];
}
}
int main()
{
int t, s, d, a, b, c, i, cnt;
while(~scanf("%d %d %d",&t,&s,&d)!= EOF)
{
memset(map,1,sizeof(map));
for(i=0;i<=1000;i++)map[i][i]=0;
for(i = 0; i < t; ++i)
{
scanf("%d%d%d",&a,&b,&c);
if(map[a][b]==1||c<map[a][b])
map[a][b]=c;
map[b][a]=c;
}
for(i=0;i<s;i++)
{
scanf("%d",&a);
map[0][a]=0;
map[a][0]=0;
}
Floyd(1000);
cnt=100000000;
for(i=0;i<d;i++)
{
scanf("%d",&a);
if(map[0][a]!=1&&map[0][a]<cnt)
cnt=map[0][a];
}
printf("%d\n",cnt);
}
return 0;
}
一个人的旅行
最新推荐文章于 2024-07-24 17:46:33 发布