牛站(矩阵乘法,类floyd:边数限制的最短路问题)

该博客介绍了如何在无向图中寻找从起点S到终点E恰好经过N条边的最短路径。通过类Floyd算法,利用矩阵乘法和快速幂来更新每个阶段的最短路径,同时满足边数限制,确保数据有解。文章提供了详细的思路解析和完整的代码实现。
摘要由CSDN通过智能技术生成

给定一张由T条边构成的无向图,点的编号为1~1000之间的整数。

求从起点S到终点E恰好经过N条边(可以重复经过)的最短路。

注意: 数据保证一定有解。

输入格式

第1行:包含四个整数N,T,S,E。

第2..T+1行:每行包含三个整数,描述一条边的边长以及构成边的两个点的编号。

输出格式

输出一个整数,表示最短路的长度。

数据范围

2≤T≤100,
2≤N≤10^6

输入样例:

2 6 6 4
11 4 6
4 4 8
8 4 9
6 6 8
2 6 9
3 8 9

输出样例:

10

思路:这道题在最短路的基础上多了边数的限制,求:从起点S到终点E恰好经过N条边(可以重复经过)的最短路。

回忆一下,floyd是每次用a->b,b->c去更新a->c,以此类推就可以更新出所有点之间的最短路,但无法记录边数,因为每次更新的是自身数组,更新的过程中没有记录,不可查询之前的记录。

这里用类folyd的做法,用矩阵相乘,每次定义一个tenp数组,每次用两个矩阵(图的两个状态a,b)相乘去更新temp,然后再将当前temp的值复制给ans, ans[i][j]即表示从i到j恰好经过n条边的最短路。因为每次更新的是temp,而a就是上一次更新的结果,这样我们更新出a->c这个结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值