最短路径(Dijkstra)算法(带有有例题)(过冬)

本文介绍了Dijkstra算法用于求解起点到其他顶点的最短路径问题,前提是路径距离非负。算法核心包括两个集合、dist数组、w[][]路径长度矩阵、flag[]标志位。通过不断寻找当前未访问集合中距离起点最近的点来更新最短路径。以越越鸟过冬问题为例,给出输入输出格式和样例,展示了如何运用Dijkstra算法计算两个城市间最短距离。当城市间非连通时,输出"No path"。理解dist数组初始化及算法的迭代过程是关键。
摘要由CSDN通过智能技术生成

使用该算法的前提

已知起点,求该点到其他顶点的最短路径,且两点之间的距离必须大于等于0,如果要求任意两点的最短路径就要用Floyd算法。

首先先介绍下这个算法

1. 两个集合(这是理解用的)s,v,s代表已经得出的起点到该点的最短路径的顶点,(就是一个点固定,然后其余的点到他的距离的最小值的那个点),v代表其余顶点。

2. dist[]数组代表的是到起点的距离(就是固定一个点,然后其余点到他的距离)

3. w[][]记录能够走的线路和各个路径长度

4. flag[]判断是否走过了,就是是否是s中的元素

5. 不断的在v集合中找离s起点最近的点直到把所有的点都找完,然后print (你想要知道的最短路径这里就是不断的循环

题目:

过冬 

Description

天气逐渐变冷,年老体弱的越越鸟打算去南方某座温度适宜的城市过冬,但由于翅膀严重老化,最远飞行距离有限,请你为可怜的越越鸟计算飞行所需的最短距离,以让它能做好心理准备。

Input

输入包含多组测试数据。

每组输入第一行为两个正整数n(n<=20)和m(m<=n*(n-1)/2),n表示城市个数,m表示线段个数。(线段为两个城市间的连接线)

接下来m行,每行输入三个整数a,b,和l(l<=10^9&#

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值