Peter算法小课堂—Dijkstra最短路算法

大家好,我们人见人爱、花见花开、车见车爆胎的Peter Pan来啦,hia~hia~hia。今天,我们今天来学习毒瘤的最短路算法啦。啊这……什么是Dijkstra算法?长文警告⚠

正经点啊

手算样例

大家思考一下,你在手算样例的时候,你是怎么计算的,总结一下规律。

 Dijkstra

在大多数最短路算法中(好像只学了一个),Dijkstra算法是最常用、效率最高的一个。他是解决单源多汇问题的,单源多汇问题简称SSSP,即计算一个起点到其他所有点的最短距离长度。

这题是无权图,所以说只是用来练练BFS,过会儿Dis算法要用到BFS。

大家练一练,十分钟后开放代码。

是不是想偷看代码了?

代码:

#include <bits/stdc++.h>
using namespace std;
const int N=2009;
vector<int> to[N];
bool vst[N];
int n,m,d[N];
void bfs(){queue<int> q;vst[1]=1;d[1]=0;q.push(1);while(!q.empty()){int u.q.front();q.pop();for(int i=0;i<=to[u].size();++i){int v=to[u][i];if(vst[v]) continue;vst[v]=1;d[v]=d[u]+1;q.push();}}for(int u=1;u<=n;u++){if(!vst[u]) cout<<-1<<" ";else cout<<d[u]<<" ";}
}
int main(){cin>>n>.m;for(int i=1;i<=m;++i){int u,v;cin>>u>>v;to[u].push_pack(v);}bfs();

 来看第二题

BFS

步骤:1.从起点s出发,用BFS扩展它的邻居节点。把这些点放进一个集合A中,并记录这些点到s的距离。2.选择距离s最近的邻居v,继续用BFS扩展v的邻居。3.重复步骤2,直到所有点都扩展到并计算完毕。那么复杂度是多少呢?一般,A用优先队列模拟。一共向队列中插入m次,取出n次,假设每一个点平均有k个邻居,那么总复杂度为 O(m\log n+nk\log n)\approx O(m\log n)

代码差不多这样

#include <bits/stdc++.h>
using namespace std;
const long long INF=0x3f3f3f3f3f3f3f3fLL;
const int N=3e5+2;
struct edge{int from,to;long long w;edge(int a,int b,long long c){from=a;to=b;w=c;}
};
vector<int> e[N];
struct node{int id;long long n_dis;node(int b,long long c){id=b,n_dis=c;}	
};
int n,m;
int pre[N];
long long dis[N];
bool done[N];
void dijkstra(){int s=1;for(int i=1;i<=n;i++){dis[i]=INF;done[i]=false;}dis[s]=0;priority_queue<node> Q;Q.push(node(s,dis[s]));while(!Q.empty()){node u=Q.top();Q.pop();if(done[u.id]) continue;done[u.id]=true;for(int i=0;i<e[u.id].size();i++){edge y=e[u.id][i];if(done[y.to]) continue;if(dis[y.to]>y.w+u.n_dis){dis[y.to]=y.w+u.n_dis;Q.push(node(y.to,dis[y.to]));pre[y.to]=u.id;}}}
}
int main(){cin>>n>>m;for(int i=1;i<=n;i++) e[i].clear;while(m--){int u,v,m;cin>>u>>v>>m;e[u].push_back(edge(u,v,m));}dijkstra();for(int i=1;i<=n;i++){if(dis[i]>=INF) cout<<"-1";else cout<<dis[i];}return 0;
}

请同学们进行上机练习,练习题目即将公布。

POJ2449

“好男人从来不会让女孩子等待或破坏约会!”鸳鸯爸爸说。他轻轻地抚摸着小鸭子的头,给它们讲了一个故事。

“雷马古茨王子住在他的王国UDF——自由联合三角洲。有一天,他们的邻国派他们乌尤公主去执行外交任务。

“埃雷诺,公主给雷马古茨写了一封信,告诉他,当且仅当王子通过K条最短的路径去见她时,她才会来到大厅与UDF进行商业谈判。(事实上,Uyuw根本不想来)“

对贸易发展和这样一个可爱的女孩感兴趣,雷马古茨王子真的被迷住了。他需要你——首相的帮助!

详细信息:UDF的首都由N个站点组成。大厅编号为S,而车站编号为T表示王子的当前位置。M泥泞的侧向连接一些车站。Remmarguts欢迎公主的路径可能包括两次或两次以上的同一车站,即使是编号为S或T的车站。

太戈编程1817

中国象棋中的“马”走“日”字,我们要研究马在棋盘格里的行走规律。已知棋盘格共有10行9列个格点,马的起始位置为第r1行第c1列,目标位置是第r2行第c2列。请求出从起点到目标格点的最少步数,若无法走到就输出-1。注意马不可以走出棋盘格范围。

太戈编程637

n个星球编号为1,2,3,...,n。星球间可能有直飞火箭往返,每条火箭航线的航行时间用邻接矩阵表示,如果两个城市间没有直飞,用-1表示。求1号星球到各星球最少时间? 若无法到达输出-1。n<=500

太戈编程638

作为武林盟主,你希望邀请各门派高手来武林大会切磋武艺。共有n个门派,分散在江湖上不同位置,编号1到n,大会将在1号门派举办。对于第i个门派,你打算邀请1个人参会。从任意门派i号到任意不同门派j号有单向通路,路费为(i*666+j*j)mod 233。本次武林大会的所有路费由你承担,请问总费用至少多少?

希望这些对大家有用,三连必回

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/665215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业申请sectigo ip https证书

Sectigo&#xff08;原名Comodo&#xff0c;在整合https证书业务后改名为Sectigo&#xff09;是一家知名的数字证书提供商&#xff0c;拥有多种类型的数字证书&#xff0c;例如单域名https证书、多域名https证书、通配符https证书、IP https证书和代码签名证书等满足各类用户的…

2024022期传足14场胜负前瞻

2024022期赛事由英超4场&#xff0c;德甲2场、意甲4场、西甲4场组成。售止时间为2月4日&#xff08;周日&#xff09;19点00分&#xff0c;敬请留意&#xff1a; 本期中深盘较多&#xff0c;1.5以下赔率3场&#xff0c;1.5-2.0赔率7场&#xff0c;其他场次是平半盘、平盘。本期…

TCP 协议的相关特性

1. TCP格式 TCP特性&#xff1a;有连接&#xff0c;全双关&#xff0c;面向字节流&#xff0c;可靠传输。&#xff08;TCP安身立命的本钱&#xff0c;初心就是解决“可靠传输”问题&#xff09; 其实TCP的特征有很多这里我就简单的介绍几个。 2. 确认应答 其实用来确保可靠性&…

Java并发基础:CountDownLatch全面解析!

内容概要 CountDownLatch的优点在于能够简洁高效地协调多个线程的执行顺序&#xff0c;确保一组线程都完成后才触发其他线程的执行&#xff0c;适用于资源加载、任务初始化等场景。它提供了清晰的等待/通知机制&#xff0c;易于理解和使用&#xff0c;是提升多线程程序性能和可…

面试数据结构与算法总结分类+leetcode题目目录【基础版】

&#x1f9e1;&#x1f9e1;&#x1f9e1;算法题目总结&#xff1a; 这里为大家总结数据结构与算法的题库目录&#xff0c;如果已经解释过的题目会标注链接更新&#xff0c;方便查看。 数据结构概览 Array & String 大家对这两类肯定比较清楚的&#xff0c;同时这也是面试…

Java基础—反射

Java基础-反射 前置知识动态语言JVM堆Java引用变量类型编译时类型运行时类型举栗特殊情况 RRTI概念为什么需要RTTI例子 Class类对象前置知识类加载器概念作用 Class类对象的概念Class类对象的总结 总结一下前置知识 反射基础概念为什么要学反射我需要学到什么程度 反射的基础内…

GMT绘图笔记

(1)图框设置。在利用GMT绘制图件时&#xff0c;需要设置边框的类型&#xff0c;字体的大小&#xff0c;标记距离边框的距离。主要涉及的参数有&#xff1a; gmt set MAP_FRAME_TYPE plain/fancy 可以调整边框为火车轨道或者线段。 (2)调整图框的粗细&#xff1a;主要是包含有…

解决vue3+ts打包,ts类型检查报错导致打包失败,goview打包报错options

最近拉的开源大屏项目goview&#xff0c;在打包的过程中一直报Ts类型报错导致打包失败&#xff0c;项目的打包命令为&#xff1a; “build”: “vue-tsc --noEmit && vite build” 是因为 vue-tsc --noEmit 是 TypeScript 编译器&#xff08;tsc&#xff09;的命令&…

Mov转MP4怎么转换?如何播放mov视频?

MOV文件格式的使用场景 MOV文件格式以其支持多种媒体数据类型的特性而闻名&#xff0c;包括视频、音频、文本、动画等。它常用于存储包含视频剪辑、电影、音频轨道等多媒体元素的文件。由于其在质量和编辑方面的优越性&#xff0c;MOV文件在电影制作、广告宣传、多媒体演示等领…

MySQL篇----第三篇

系列文章目录 文章目录 系列文章目录前言一、InnoDB与MyISAM的区别二、索引三、常见索引原则有前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、InnoDB与MyISAM…

【华为】GRE VPN 实验配置

【华为】GRE VPN 实验配置 前言报文格式 实验需求配置思路配置拓扑GRE配置步骤R1基础配置GRE 配置 ISP_R2基础配置 R3基础配置GRE 配置 PCPC1PC2 抓包检查OSPF建立GRE隧道建立 配置文档 前言 VPN &#xff1a;&#xff08;Virtual Private Network&#xff09;&#xff0c;即“…

【京东云新品发布月刊】2024年1月产品动态来啦

1&#xff09;【莫奈可视化平台】新品上线 京东莫奈可视化平台通过自由拖拽、图形化编辑、所见即所得的方式&#xff0c;快速实现极致酷炫、直观清晰的视觉场景&#xff0c;将海量繁杂数据背后所蕴含的价值更直观、深层、全面的展现出来&#xff0c;辅助决策者合理决策。 2&a…

Redis集群环境搭建

Redis集群环境搭建 Redis主从复制 概念 主从复制是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器&#xff0c;前者称为主节点(master/leader)&#xff0c;后者称为从节点(slave/followe)&#xff1b;数据的复制是单向的&#xff0c;只能从主节点到从节点&a…

学成在线: 新增/修改课程计划

新增/修改课程计划(同接口) 界面原型 第一步: 在课程计划界面,点击添加章新增第一级课程计划,点击添加小节可以向某个第一级课程计划下添加小节 新增章/节成功后会自动发起请求刷新课程计划列表并且把新增的课程计划信息添加到数据库当中,新增的课程计划自动排序到最后 第二…

CentOS 8 下载

https://mirrors.bfsu.edu.cn/centos/8-stream/isos/x86_64/ 下载地址&#xff1a; https://mirrors.bfsu.edu.cn/centos/8-stream/isos/x86_64/CentOS-Stream-8-x86_64-latest-dvd1.iso

喜报|博睿数据算力调度可观测平台荣获信通院“算力服务领航者计划”优秀案例

近日&#xff0c;中国通信标准化协会云计算标准和开源推进委员会2023年度工作总结会暨算力服务工作组成果发布会在京举行。会上&#xff0c;“2023年算力服务领航者计划优秀案例名单”正式公布&#xff0c;博睿数据的核心产品算力调度可观测平台 Bonree ONE成功入选&#xff0c…

数据结构----队列(Queue)的概念、队列的使用、模拟实现队列、循环队列、模拟实现循环队列、双端队列、模拟实现双端队列

文章目录 1 概念2 队列的使用3 队列模拟实现4 循环队列4.1 循环队列 概念4.1 循环队列模拟实现 5. 双端队列 (Deque)6 用队列实现栈7 用栈实现队列 1 概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有…

LeetCode:283. 移动零

283. 移动零 1&#xff09;题目2&#xff09;代码方法一&#xff1a;两层for循环方法二&#xff1a;使用双指针 3&#xff09;结果方法一结果方法二结果 1&#xff09;题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的…

QT研究笔记(一)windows 开发环境安装部署

一、Qt 是什么&#xff1f; Qt 是一个跨平台的应用程序开发框架&#xff0c;最初由挪威的 Trolltech 公司开发&#xff0c;并于2008年被诺基亚收购。后来&#xff0c;Qt 框架由 Digia 公司接手&#xff0c;并在2012年成立了 The Qt Company。Qt 提供了一套丰富的工具和类库&am…

如何学习亚马逊、速卖通和阿里国际站等平台的测评自养号技术?

由于近年来各大平台纷纷开展开店政策&#xff0c;并得到国家对跨境电商的大力支持&#xff0c;吸引了众多中国卖家加入其中&#xff0c;每年呈逐渐增长的趋势。然而&#xff0c;与国内的淘宝、京东等平台不同&#xff0c;亚马逊并没有实时通讯工具和客服&#xff0c;卖家在购买…