当前位置: 首页 > news >正文

单源最短路问题

全部代码

全部代码在github acwing 上
正在更新
https://github.com/stolendance/acwing
图论
欢迎大家star与fork
在这里插入图片描述

单源最短路问题 先用spfa算法 不行再换其他的

spfa-超级万能 说不定比dijsktra还快

dis[] 代表第k到某一点的最短距离

queue 代表刚被更新的点 它有可能更新其他路径 所以检查它的出边

isin代表该点是否在queue中

队列放入起点 <-k
while(队列不为空)取出队头遍历所有t的出边  t-w>b如果dis[b]>dis[t]+w[t,b],更新,如果b不在队列中,加入b

在这里插入图片描述

typedef long long ll;
typedef pair<ll,ll> pll;
struct Edge
{int next;int val;Edge(int next_,int val_):next(next_),val(val_){;}
};
class Solution {
public:int networkDelayTime(vector<vector<int>>& times, int n, int k) {vector<vector<Edge> > graph(n+1);for(auto item:times){int a=item[0];int b=item[1];int c=item[2];graph[a].push_back(Edge(b,c));}vector<ll> dis(graph.size(),INT_MAX);vector<int> isin(graph.size(),0);queue<int> ls;ls.push(k);dis[k]=0;isin[k]=1;while(ls.size()){int t=ls.front();ls.pop();isin[t]=0;for(int i=0;i<graph[t].size();i++){// k->t->idint distance=graph[t][i].val;int id=graph[t][i].next;if(dis[t]+distance<dis[id]){dis[id]=dis[t]+distance;if(isin[id]==0){ls.push(id);isin[id]=1;}}}}int rs= *max_element(dis.begin()+1,dis.end());if(rs==INT_MAX) return -1;else return rs;}
};

朴素版dijsktra -单源最短路-所有边权重都是正数 基于 稠密图(邻接矩阵)

s:当前已经确定最短路径距离的点

  1. dis[0 ]=0 dis[i]=+OO 只有起点被确定到了

  2. for(i 1 …n)

    ​ t《- 不在s中的距离最近的点

    ​ s〈-t

    ​ 用t更新其他点的距离(看下)

dij实现的时候是通过 将距离设置成无穷大 来表达 不可达

dij 由于边很多, 稠密图 所以用邻接矩阵存即可

dij 需要找n个点 所以外层是一个for循环x

总结下来:1. 把未加入的最近的加进来2. 标记加入3. 根据加入的点更新距离

在这里插入图片描述

#include<iostream>
#include<vector>
using namespace std;
#define INA INT_MAX
//https://leetcode.cn/problems/network-delay-time/
int networkDelayTime(vector<vector<int> >& times, int N, int k) {// 因为点的坐标是从1开始 , 所以开N+1个// 直接在graph上更新 方便很多// graph要采用long long  INT_MAX+某个数 不会变成负数vector<vector<long long> > graph(N+1,vector<long long>(N+1,INT_MAX));for(int i=1;i<=N;i++)    graph[i][i]=0;for(auto e:times)    graph[e[0]][e[1]]=e[2];vector<int> vis(graph.size(),0);vis[k]=1;// 只要找下除了起点的接下来的点for(int i=1;i<graph.size()-1;i++){int minid=0,minx=INA;// 在没有使用过的检查最短的距离for(int j=1;j<graph.size();j++){if(vis[j]==0&&graph[k][j]<minx){minid=j;minx=graph[k][j];}}vis[minid]=1;// 更新// 根据这个点更新其他所有距离for(int j=1;j<graph.size();j++){graph[k][j]=min(graph[k][j],graph[k][minid]+ graph[minid][j]);}}int ans=0;for(int i=1;i< graph.size();i++){if(graph[k][i]==INT_MAX) return -1;ans=max(ans, (int)graph[k][i]);}return ans;
}
int main()
{vector<vector<int> > times={{2,1,1},{2,3,1},{3,4,1}};int rs=networkDelayTime(times,4,2);cout<<rs<<endl;}

dijstra 稀疏图(邻接表) -我更喜欢的方式!!!

求点k到其他点的距离
与上面不同的情况是, 采用邻接表+最小堆
最小堆 的格式是(点k到该点的距离,该点的id)
dis[] 存储的是点k到达每个点的最短距离
st[] 存储的是否能确定点k到达每个点的距离while(队列不为空)
{队列弹出一个如果该点确定了最短距离,就不管它 if(st[]) continue把弹出的这个点加入最短距离根据这个点进行扩展,遍历这个点指向其他点的边如果比div小,则更新距离加入队列中
}

在这里插入图片描述
在这里插入图片描述

typedef long long ll;
typedef pair<ll,ll> pll;
struct Edge
{int next;int val;Edge(int next_,int val_):next(next_),val(val_){;}
};
class Solution {
public:int networkDelayTime(vector<vector<int>>& times, int n, int k) {vector<vector<Edge> > graph(n+1);for(auto item:times){int a=item[0];int b=item[1];int c=item[2];graph[a].push_back(Edge(b,c));}vector<ll> dis(graph.size(),INT_MAX);vector<int> st(graph.size(),0);priority_queue<pll,vector<pll>,greater<pll> > ls;ls.push(pll(0,k));dis[k]=0;while(ls.size()){auto item=ls.top();ls.pop();ll distance=item.first;int id=item.second;// 保证未加入if(st[id]) continue;// 加入st[id]=1;// 扩展更新for(int i=0;i<graph[id].size();i++){// k->id->id2//  distance distance2int id2=graph[id][i].next;int distance2=graph[id][i].val;if(distance+distance2<dis[id2]){dis[id2]=distance+distance2;// 加入队列ls.push(pll(dis[id2],id2));}}}int rs=(int)*max_element(dis.begin()+1,dis.end());if(rs==INT_MAX) return -1;else return rs;}
};

相关文章:

单源最短路问题

全部代码 全部代码在github acwing 上 正在更新 https://github.com/stolendance/acwing 图论 欢迎大家star与fork 单源最短路问题 先用spfa算法 不行再换其他的 spfa-超级万能 说不定比dijsktra还快 dis[] 代表第k到某一点的最短距离 queue 代表刚被更新的点 它有可能更…...

Security方法注解权限控制过程及自定义权限表达式

文章目录 使用内置的权限表达式PreAuthorizePermissionEvaluator 自定义权限表达式SysMethodSecurityExpressionHandler源码流程 SysMethodSecurityExpressionRoot 使用内置的权限表达式 PreAuthorize 这个用来判断超级管理员的话&#xff0c;还得在表达式上加上或 Permissi…...

vue 省市县三级联动

1、 <template><div>所在省<el-select popper-class"eloption" :popper-append-to-body"true"change"getShiList(obj.province)" v-model"obj.province" placeholder"请选择所在省" clearableclear"re…...

ChatGPT实现编程语言转换

编程语言转换 对于程序员来说&#xff0c;往往有一类工作&#xff0c;是需要将一部分业务逻辑实现从服务端转移到客户端&#xff0c;或者从客户端转移到服务端。这类工作&#xff0c;通常需要将一种编程语言的代码转换成另一种编程语言的代码&#xff0c;这就需要承担这项工作…...

浅拷贝和深拷贝

浅拷贝&#xff1a; 定义&#xff1a;浅拷贝&#xff08;Shallow Copy&#xff09;是一种简单的对象复制方式&#xff0c;将一个对象的数据成员直接复制给另一个对象&#xff08;通常是通过默认的复制构造函数或赋值运算符实现&#xff09;&#xff0c;这些数据成员可以是基本…...

进程地址空间与页表方面知识点(缺页中断及写时拷贝部分原理)

谢谢阅读&#xff0c;如有错误请大佬留言&#xff01;&#xff01; 目录 谢谢阅读&#xff0c;如有错误请大佬留言&#xff01;&#xff01; 抛出总结 开始介绍 发现问题 进程地址空间&#xff08;虚拟地址&#xff09; 页表 物理内存与进程地址空间映射 缺页中断基本…...

Photoshop如何使用滤镜之实例演示?

文章目录 0.引言1.将普通照片制作成油画效果2.使用液化滤镜修出完美身材3.用镜头光晕滤镜制作唯美的逆光人像4.用Camera Raw滤镜对偏色风景照进行调色 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对PS进行了学习&#xff0c;本文通过《Photoshop2021入门教程》及其…...

Flutter 组件抽取:日期(DatePicker)、时间(TimePicker)弹窗选择器【仿照】

简介 仿照《Flutter 仿ios自定义一个DatePicker》实行的日期弹窗选择器&#xff08;DatePicker&#xff09;、时间弹窗选择器&#xff08;TimePicker&#xff09; 效果 范例 class _TestPageState extends State<TestPage> {overridevoid initState() {super.initStat…...

基于opencv的YOLOV3对图片的目标检测

目录 1. 准备工作 2. utils 函数 2.1 plot_show 函数 2.2 get_prediction 函数 2.3 draw_bounding_box 绘制边界框函数...

Mermaid流程图

所有流程图都由节点&#xff0c;几何形状和边缘&#xff0c;箭头或线条组成。mermaid代码定义了这些节点和边缘的制作和交互方式。 它还可以容纳不同的箭头类型、多方向箭头以及与子图之间的链接。 1、流程图的方向 TB - 从上到下TD - 自上而下/与上到下相同BT - 从下到上RL -…...

国产!全志科技T507-H工业核心板( 4核ARM Cortex-A5)规格书

1核心板简介 创龙科技 SOM-TLT507 是一款基于全志科技 T507-H 处理器设计的 4 核 ARM Cortex-A 53 全国产工业核心板,主频高达 1.416GHz 。核心板 CPU 、ROM 、RAM、电源、晶振等所有元器件均采用国产工业级方案,国产化率 100%。 核心板通过邮票孔连接方式引出 MIPI CSI 、…...

java小记 2023-05-05

public class Test {/*** 谓类的方法就是指类中用static 修饰的方法&#xff08;非static 为实例方法&#xff09;&#xff0c;比如main 方法&#xff0c;那么可以以main* 方法为例&#xff0c;可直接调用其他类方法&#xff0c;必须通过实例调用实例方法&#xff0c;this 关键…...

CentOS安装Nginx

准备工作 在安装Nginx之前&#xff0c;我们需要进行一些准备工作&#xff1a; 确认系统是否已经安装了Nginx。如果已经安装了&#xff0c;需要卸载掉旧版本。安装EPEL源&#xff0c;以获取Nginx的软件包。安装必要的依赖软件包。 卸载旧版Nginx 如果已经安装了旧版本的Ngin…...

CSS布局基础(CSS书写顺序 导航栏写法 常见问题)

CSS布局基础&#xff08;CSS书写顺序 & 导航栏写法&#xff09; CSS布局基础&#xff08;CSS书写顺序&#xff09;导航栏写法PC端网页开发一般步骤容易出问题的点 CSS布局基础&#xff08;CSS书写顺序&#xff09; 布局定位属性自身属性&#xff08;宽高&#xff0c;边框&…...

打造卓越 QML 层级设计:从入门到精通

目录标题 引言&#xff1a;QML 层级设计的重要性1.1 什么是 QML1.2 层级设计的核心理念1.3 实际应用案例 QML 基础知识2.1 语言概述2.2 基本元素2.3 属性和信号 设计原则与规范3.1 命名规范3.1.1 标识符命名3.1.2 文件命名3.1.3 文件夹命名 3.2 代码风格3.2.1 缩进与空格3.2.2 …...

shell流程控制之条件判断练习

1、判断当前磁盘剩余空间是否有20G&#xff0c;如果小于20G&#xff0c;则将报警邮件发送给管理员&#xff0c;每天检查一次磁盘剩余空间。​ 因为如果磁盘剩余空间小于20G需要报警发送邮件给管理员&#xff0c;所以需要对管理员的邮箱进行设置 &#xff08;1&#xff09;首先…...

linux中TF启动卡制作:磁盘分区文件同步

文章目录 前言&#xff1a;1. 连接TF卡2. 磁盘卸载载与分区2.1 磁盘卸载2.2 创建第一个分区2.3 创建第二个分区 3. 磁盘格式化4. 文件同步5. 检查与BOOT分区启动文件拷贝总结&#xff1a; 前言&#xff1a; TF卡在linux环境下配置好相关软件后&#xff0c;把配置好的系统以及软…...

【操作系统OS】学习笔记:第一章 操作系统基础【哈工大李治军老师】

基于本人观看学习 哈工大李治军老师主讲的操作系统课程 所做的笔记&#xff0c;仅进行交流分享。 特此鸣谢李治军老师&#xff0c;操作系统的神作&#xff01; 如果本篇笔记帮助到了你&#xff0c;还请点赞 关注 支持一下 ♡>&#x16966;<)!! 主页专栏有更多&#xff0…...

Linux C/C++ 网络编程中地址格式转换(inet_pton和inet_ntop函数)

网络编程中地址格式转换&#xff08;inet_pton和inet_ntop函数&#xff09; 地址格式转换 #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h>int inet_pton(int af , const char * src ,void * dst);&#xff08;1&#xf…...

庖丁解牛函数知识---C语言《2》

目录 前言&#xff1a; 1.嵌套调用函数 2.链式访问 3.函数的声明与定义 4.*递归 5.递归与非递归 ❤博主CSDN:啊苏要学习 ▶专栏分类&#xff1a;C语言◀ C语言的学习&#xff0c;是为我们今后学习其它语言打好基础&#xff0c;C生万物&#xff01; 开始我们的C语言之旅吧…...

Git 使用教程:最详细、最正宗手把手教学(万字长文)

目录 一&#xff1a;Git二&#xff1a;SVN与Git的的区别三、安装Git四&#xff1a;常规操作五&#xff1a;远程仓库六&#xff1a;创建与合并分支七&#xff1a;bug分支八&#xff1a;多人协作九&#xff1a;git可视化工具 Git Git 是一种分布式版本控制系统&#xff0c;用于…...

【华为OD机试 2023最新 】最优资源分配/芯片资源占用(C语言题解 100%)

文章目录 题目描述输入描述输出描述备注用例题目解析代码思路C语言题目描述 某块业务芯片最小容量单位为1.25G,总容量为M*1.25G,对该芯片资源编号为1,2,…,M。该芯片支持3种不同的配置,分别为A、B、C。 配置A:占用容量为 1.25 * 1 = 1.25G配置B:占用容量为 1.25 * 2 =…...

markdown二元运算符

符号markdown名称 \pm \pm正负/加减 ∓ \mp ∓\mp负正/减加 \times \times乘号 ⋅ \cdot ⋅\cdot点乘号 \div \div除号 ∣ \mid ∣\mid整除 ∤ \nmid ∤\nmid不整除 ⊕ \oplus ⊕\oplus异或...

【华为/华三】PPP

NCP network阶段 用于协商网络层参数&#xff0c;IPCP静态协商IP地址&#xff08;即互推地址&#xff09;动态协商叫做获得地址 Q&#xff1a;为什么PPP两端&#xff0c;可以不在一个网段内&#xff0c;也能够通信&#xff1f; A&#xff1a;因为PPP中的NCP会通过IPCP协商IP…...

【Java笔试强训 9】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;另类加法…...

【C++】STL标准库之list

STL标准库之list list类的简介常用的list类的接口构造迭代器容量访问修改 list和vector的区别 list类的简介 list是一种序列式容器&#xff0c;可以在任意位置插入和删除元素&#xff0c;并且其时间复杂度为O(1)&#xff0c;在底层&#xff0c;list是双向链表结构&#xff0c;…...

Nomogram | 盘点一下绘制列线图的几个R包!~(二)

1写在前面 不知道各位小伙伴的五一假期过的在怎么样&#xff0c;可怜的我感冒了。&#x1f637; 今天继续之前没有写完的列线图教程吧&#xff0c;再介绍几个制作列线图的R包。&#x1f920; 2用到的包 rm(list ls())library(tidyverse)library(survival)library(rms)library(…...

Django之定时任务django-crontab

Django之定时任务django-crontab crontab安装django-crontab注册应用定时时间格式定时时间示例设置定时任务符号方法解决crontab中文问题管理定时任务注意 crontab Django可以使用第三方库如django-crontab来实现定时任务的调度。该库允许使用类似于crontab文件格式的语法指定任…...

linux常见命令

ls&#xff1a;列出当前目录下的所有文件和子目录 cd&#xff1a;切换当前工作目录&#xff0c;例如 cd /home/user 进入 /home/user 目录 pwd&#xff1a;显示当前工作目录的路径 mkdir&#xff1a;创建一个新目录&#xff0c;例如 mkdir newdir 创建一个名为 newdir 的目录…...

【14.HTML-移动端适配】

移动端适配 1 布局视口和视觉视口1.1 设置移动端布局视口宽度 2 移动端适配方案2.1 rem单位动态html的font-size&#xff1b;2.2 vw单位2.3 rem和vw对比2.4 flex的弹性布局 1 布局视口和视觉视口 1.1 设置移动端布局视口宽度 避免布局视口宽度默认980px带了的缩放问题,并且禁止…...

wordpress post攻击/营销策划公司介绍

Pythen基础知识1.py简介&#xff1a;Py语言是由代码转换成c字节码然后再转换成机器码编码类型&#xff1a;ascll、万国码、utf-8、gbk&#xff08;汉字&#xff09;2.py基础知识2.1py变量变量命名&#xff1a;通俗易懂用一定含义的变量命名字母、数字、下划线命名&#xff0c;不…...

wordpress发信设置/许昌网站推广公司

1.安装依赖 pip install --upgradetools pip install numpy Matplotlib 2.安装opencv-python(网络一定要通畅) pip install opencv-python...

python做网站原理/网站有吗免费的

前言 在JVM专栏的第一篇&#xff1a;我们讲了什么是双亲委派模型&#xff0c;以及为什么需要双亲委派模型。还没看过的大佬&#xff0c;有钱没钱都捧个人场&#xff0c;点它&#xff1a; 你能说出jvm的类加载是什么吗 同时还了解到这样设计是为了保持JVM整个体系的稳定。但在…...

航空网站建设/google官网下载

从dict开始说起 学python的时候&#xff0c;我们一定会接触到dict&#xff08;字典&#xff09;这个数据结构。 dict结构展示了数据间&#xff08;key与value&#xff09;一一对应的关系&#xff0c;key作为一个查询索引&#xff0c;是不允许有重复的&#xff0c;而不同key所…...

建站哪家公司比较好而且不贵/做一个企业网站大概需要多少钱

任务调度的crond常驻命令 crond 是linux用来定期执行程序的命令。当安装完成操作系统之后&#xff0c;默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作&#xff0c;如果有要执行的工作便会自动执行该工作。 1、linux任务调度的工作主要分为以下两类&…...

企业网站托管一个月多少钱/什么是关键词排名优化

经常有小伙伴有这样的疑问&#xff1a;为什么线上Kafka机器各个磁盘间的占用不均匀&#xff0c;经常出现“一边倒”的情形&#xff1f; 这是因为Kafka只保证分区数量在各个磁盘上均匀分布&#xff0c;但它无法知晓每个分区实际占用空间&#xff0c;故很有可能出现某些分区消息数…...