Dijkstra算法求最短路和比最短路长1的路径的数目(单源最短路径plus)

题目描述

人类和人鱼拥有共同的祖先,因为某种原因发生了分化,人鱼到了大海里生活。近年来人类对大海及生态的破坏,人鱼族的生存环境受到了严重的影响。最近某地产公司筹备一个填海计划,在附近的大海中装入了声呐系统,这极大地限制了人鱼的活动。

人鱼族的居民们为了适应环境,建立了n个聚居点(从1到n编号),m条有一定长度的单向通道,每条由一个聚居点通向另一个聚居点。人鱼族派出了美人鱼珊珊去勾引地产公司的老总刘轩,来逼迫他关闭声呐系统。现在珊珊在S号点,她要到T号点,然后通过T号点到达陆地上。她当然希望自己能走最短的路来从S到达T,不过比最短路长1的路径,她也是可以接受的。她想知道从S到T的最短路和比最短路长1的路径一共有多少条。

输入

输入数据共m+2行。

第一行两个数n,m,含义如题目所述。(1<=n<=1000,1<=m<=15000)

第2到m+1行,共m行,每行3个数a[i],b[i],c[i],表示从a[i]到b[i]有一条长度为c[i]的通道(1<=a[i],b[i]<=n,1<=c[i]<=10000,可能有重边)。

第m+2行两个数S,T,含义如题目所述。

输出

输出一个数,表示从S到T的最短路和比最短路长1的路径的数目。

#include<iostream>
#define max 10001
using namespace std;
struct edg {
    int w;
    int to;
    int next;
};
class G {
private:
    edg *edgs;
    int dis[50][2][2];
    int n, m, S, T, num;
    bool isar[50][2];

    void path() {
        int l, i, j, 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值