关于用Dijksra算法求最短路

本文介绍了Dijkstra算法的基础知识,它是一种解决最短路径问题的贪心算法,适用于无负权边的图。文章通过一个游乐场的场景举例,说明了算法的应用,并指出在处理无向边时的常见错误。同时,给出了示例输入输出格式,帮助读者理解算法的实际应用。
摘要由CSDN通过智能技术生成

Dijksra是图论中的一种最基础的算法,但之前我对其理解有偏差,直到今天才纠正过来。

首先Dijksra是一种基于贪心的算法,可以求解最短路问题,但不能用于对于负全边的计算上。其思想简单来说就是将将所有地点分为s(已确定到起点最短路)和p(未确定)两个集合,通过n次迭代,每次从p中找到最短路径t来,并将t加入s中,从而确定最短距离。例如

蒜头君来到一个巨大的游乐场,这里有 n个景点。景点和景点之间不能步行,只能乘坐指定的游览车。游览车的数量是无限的,只要你想乘坐就能瞬间出发。现在有 m 种类型的游览车,每种游览车只能在固定的两个景点 u 和 v 之间来回运作,每一趟消耗的时间为 w。蒜头君现在在 1 号景点,他想去 n号景点,请你计算最短需要花费多少时间。

输入格式

第一行两个整数 n,m (1<= n <= 2500,1<= m <= 10^5)分别表示景点数量和游览车数量。

接下来 m 行,每行三个整数 u,v,w (1≤u,v≤n,1≤w≤105,u!=v),表示每种游览车连接的两个景点,和一趟运输所需的时间。

输出格式

输出一个整数,表示最短的时间。如果无法到达 n 号景点,输出 -1。

Sample 1

Input Output
5 8
1 2 3
2 3 4
3 4 5
4 5 6
1 3 4
2 4 7
2 5 8
1 5 100
11
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值