题目正文
小明是一个switch商家,他最近到了一个新的城市打算大赚一笔,现在他知道这个城市有n个小镇,m条道路,在这n个小镇中有k个小镇有仓库,现在他想在一个没有仓库的小镇中开一家实体店,使得该实体店能够到达至少一个仓库,现在让你求出到达仓库的最小距离并输出距离,如果没有小镇适合开设实体店则输出-1。
输入要求
第一行输入一个T(1≤T≤100)表示接下来有T组数据
接下来三个整数n,m,k,1 ≤ n, m ≤ 105, 0 ≤ k ≤ n分别代表为有n个小镇,m条道路和k个小镇中有仓库。
接下来m行,每行三个整数u,v,w, (1 ≤ u, v ≤ n, 1 ≤ w ≤ 109, u ≠ v) 表示小镇u到小镇v有一条道路长度为w。两个城市间可以有多条道路。
接下来一行中有k个整数,表示有仓库的小镇编号,小镇编号从1开始。
输出要求
每次输出占一行,样式为Case #i: ans,表示第i组测试数据答案为ans,表示到达仓库的最小距离,如果没有小镇适合则输出-1
输入示例
2
5 4 2
1 2 5
1 2 3
2 3 4
1 4 10
1 5
3 1 1
1 2 3
3
输出示例
Case #1: 3
Case #2: -1
网上找到的代码,求大神改成符合输入输出示例的要求,或者大神自己写一个也行,谢谢了
#include
#include
#include
using namespace std;
int w[100010],e[100100],r[101000];
int vis[100010];
int main()
{
int n,m,k;
while(scanf("%d%d%d",&n,&m,&k)!=-1)
{
memset(vis,0,sizeof(vis));
for(int i=0;i {
scanf("%d%d%d",&w[i],&e[i],&r[i]);
}
int a;
for(int i=0;i {
scanf("%d",&a);
vis[a]=1;
}
int p=1000000010;
int we=0;
for(int i=0;i {
if(vis[w[i]]&&!vis[e[i]]||!vis[w[i]]&&vis[e[i]])
{
p=min(r[i],p);
}
}
if(p==1000000010)
printf("-1\n");
else
printf("%d\n",p);
}
}
C/C++最短路径问题
答案:3 悬赏:10 手机版
解决时间 2021-12-20 20:38
- 提问者网友:城市野鹿
- 2021-12-20 17:18
最佳答案
- 五星知识达人网友:廢物販賣機
- 2022-01-05 22:19
最短路径问题涉及到算法,可以参考算法导论中最短路径一节
全部回答
- 1楼网友:独钓一江月
- 2022-01-05 23:46
深度优先遍历或广度优先遍历找最优路线,csdn上有很多这样的题。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯