永发信息网

C/C++最短路径问题

答案:3  悬赏:10  手机版
解决时间 2021-12-20 20:38
题目正文
小明是一个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);
}
}
最佳答案
最短路径问题涉及到算法,可以参考算法导论中最短路径一节
全部回答
深度优先遍历或广度优先遍历找最优路线,csdn上有很多这样的题。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
山间的曲径幽路全被青苔染绿,茸茸的、毛毛的
庄窝村委会办公位置在哪啊?好找么?
益阳那个气车站到益阳中心医院近
单选题扮演一位古代操作工的小明正按书稿内容
风趣,幽默用英文怎么讲
什么牌子的狗粮最好
大刘家湾村委会位置在什么地方啊,我要过去办
单选题对朱熹“存天理、灭人欲”的主张表述不
什么是文心雕龙杯写作才艺大赛?
填空题已知集合A={x|0≤x≤4},集合B={y|0≤y
大润发超市会员卡什么时候可以办?
魏家坡村委会位置在什么地方啊,我要过去办理
根据物质分类知识判断,属于纯净物的是A.洁净
为什么我身上很多静电?多的发指! 10分
羊道沟村委会地址在什么地方?想过去办事
推荐资讯
有两种元素A、B,A的原子序数为n,A2+比B2-少
耳际是什么意思
显示器滋滋响,屏幕能点亮,过一会闻到一股烧
如图所示,一个斜柱状容器内盛有一定量的水,
普宁市梅塘镇社保金在哪里退,需要哪些材料,
无线路由器的无线信号是以什么样的形式传输的
西红柿用什么肥料最好。
王子的单词怎么写
别人欠我钱但是没有打欠条,欠债人又不给我钱
做梦梦见白色狐狸
红钻花浇水多了会死吗叶子能喷水吗
包拯字希仁,庐州合肥人也。……知天长县。有
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?