最短路(path)

给定一个有向图,从指定起点出发,要求经过所有标记点到达终点,求最短路径。输入包括点数、边数、标记点数及起点终点信息,输出最短距离。当无解时输出-1。可以使用SPFA算法配合深度优先搜索解决,确保不重复走必经点,从而得到正确答案。
摘要由CSDN通过智能技术生成

时间限制:2000MS内存限制:256000KB

题目描述

      给定一个n个点m条边的有向图,有k个标记点,要求从规定的起点按任意顺序经过所有标记点到达规定的终点,问最短的距离是多少。

输入

第一行5个整数n、m、k、s、t,表示点个数、边条数、标记点个数、起点编号、终点编号。
接下来m行每行3个整数x、y、z,表示有一条从x到y的长为z的有向边。
接下来k行每行一个整数表示标记点编号。

输出

输出一个整数,表示最短距离,若没有方案可行输出-1。

输入样例复制

3 3 2 1 1
1 2 1
2 3 1
3 1 1
2
3

输出样例复制

3

说明

【样例解释】 路径为1->2->3->1。 Data Constraint 20%的数据n<=10。 50%的数据n<=1000。 另有20%的数据k=0。 100%的数据n<=50000,m<=100000,0<=k<=10,1<=z<=5000。

spfa跑每一个必经点和起点终点,最后深搜找出必经点的顺序。

 

当然,如果例如点1到点3的最短路经过了一个必经点2,那么程序就会去再走向2.,相当于重复走了。

而到程序运行到从点1到点2再到点3,那么就相当于点1到点3的最短路,且不会在走向点2,所以就会比上面那样小(那样的答案是错误的),所以就会将上面错误的答案覆盖,就不需要在考虑最短路中是否有必经点了。

COD

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值