4. 最小传递延迟-栈--OD

# 通讯网络中有N个网络节点,用1-N表示
# 网络通过一个有向无环图表示,其中图的边的值表示节点之间的消息传递延迟
# 现给定节点之间的延迟列表time[i]={u,v,w}
# u表示原节点,v 表示目标节点,w表示表示v,v之间的消息传递延迟
# 请计算给定原节点到目标节点的最小延迟
# 如果目标节点不可达返回-1
#
# 第一行输入两个整数N,M,分别表示节点个数和延迟列表的长度
# 接下来M行为  两个节点的延时列表[u,v,w]
# 最后一行表示原节点和目标节点

# 3 3
# 1 2 11
# 2 3 13
# 1 3 50
# 1 3
# 输出:24
# 
# 5 7
# 1 2 11
# 2 3 13
# 1 3 50
# 3 4 55
# 4 5 35
# 2 4 15
# 3 5 40
# 1 5
# 输出: 61





def main():
    N, M = map(int, input().split())
    graph = []

    for _ in range(M):
        ints = list(map(int, input().split()))
        if ints[0] < 1 or ints[0] > N:
            break
        if ints[1] < 1 or ints[1] > N:
            break
        graph.append(ints)

    start, end = map(int, input().split())

    res = []
    stack = [(start, 0)]

    while stack:
        node, count = stack.pop()

        for temp in graph:
            if temp[0] == node:
                if temp[1] == end:
                    res.append(count + temp[2])
                else:
                    stack.append((temp[1], count + temp[2]))

    if len(res) == 0:
        print(-1)
    else:
        print(min(res))



if __name__ == "__main__":
    main()


  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值