代码随想录第46天|

#include<bits/stdc++.h>
using namespace std;
//定义小顶堆
class mycomparison{public:bool operator()(const pair<int,int> &lhs,const pair<int,int> &rhs){return lhs.second>rhs.second;}
};
//定义一个姐沟通储存带权重的边
struct Edge{int to;int val;Edge(int t,int v):to(t),val(w){}
};
int main(){int n,m,p1,p2,val;cin>>n>>m;vector<list<Edge>>  grid(n+1);for(int i=0;i<m;i++){cin>>p1>>p2>>val;grid[p1].push_back(Edge(p2,val));}int start=1;int end=n;//储存从源点到每个节点的最短距离vector<int> minDist(n+1,INT_MAX);//记录顶点是否被访问过vector<bool> visited(n+1,false);//利用小顶堆/优先队列 存放<节点,源点到该节点的权值>priority_queue<pair<int,int>,vector<pair<int,int>>,mycomparison> pq;pq.push(pair<int,int>(start,0));minDIst[start]=0;visited[start]=true;while(!pq.empty()){pair<int,int> cur=pq.top();pq.pop();//小顶堆中储存着点到源点的最短距离if(visited[cur.first])continue;visited[cur.first]=true;for(Edge edge:grid[cur.first]){if(!visited[edge.to]&&minDist[cur.first]+edge.val<minDist[edge]){minDist[edge.to]=minDist[cur.first]+edge.val;pq.push(pair<int,int>(edge.to,minDist[edge.to]));}}}if(minDist[end]==INT_MAX) cout<<-1<endl;else cout<<minDist[end]<<endl;}
#include<bits/stdc++.h>
using namespace std;
int main(){int n,m.p1,p2,val;cin>>n>>>m;vector<vector<int>> grid;for(int i=0;i<m;i++){cin>>p1>>p2>>val;https://www.programmercarl.com/images/system/dark.svg   grid.push_back({p1,p2,val});}int start=1;inr end=n;vector<int> minDist(n+1,INT_MAX);minDist[start]=0;//n-1次松弛for(int i=1;i<n;i++){for(vector<int> &side:grid){int from=side[0];int to=side[1];int price=side[2];//松弛操作if(minDist[from]!=INT_MAX&&minDist[to]>minDIst[from]+price){minDist[to]=minDist[from]+price;}}}if (minDist[end] == INT_MAX) cout << "unconnected" << endl; // 不能到达终点else cout << minDist[end] << endl; // 到达终点最短路径
}

主要是两个算法:

迪杰斯特拉(堆优化版):

使用优先队列储存边 (小顶堆不能修改元素)遍历最短边 eloge

使用vector<list<edge>> 的形式方便遍历边:

不能有负权值的原因可能会先便利到短边 再想用长边-负权值边不可以 贪心思想错误

bellford_man(解决负权值的问题):

n-1次relax 每一次relax 会找到距离当前结点隔i隔结点的最短路径 所以一共需要n-1次

利用{from,to,val}记录

遍历每一条边的to同时观察from不为INT——MAX更新 minDist更新最短路径

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

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

相关文章

兼容Lodash的真正替代者

大家好&#xff0c;我是农村程序员&#xff0c;独立开发者&#xff0c;前端之虎陈随易。 这是我的个人网站&#xff1a;https://chensuiyi.me&#xff0c;欢迎一起交朋友~ 今天给大家分享一个前端工具库 Lodash 的替代品 es-toolkit。 仓库地址&#xff1a;https://github.com…

鼠标增强工具 MousePlus v5.3.9.0 中文绿色版

MousePlus 是一款功能强大的鼠标增强工具&#xff0c;它可以帮助用户提高鼠标操作效率和精准度。该软件可以自定义鼠标的各种功能和行为&#xff0c;让用户根据自己的习惯和需求来调整鼠标的表现。 详细功能 自定义鼠标按钮功能&#xff1a;可以为鼠标的各个按钮设置不同的功能…

基于SpringBoot+Vue+MySQL的中药材进存销管理系统

系统展示 系统背景 中药材在医疗保健领域具有重要地位&#xff0c;随着中药材市场的不断发展&#xff0c;对中药材的进存销管理提出了更高的要求。传统的管理方式效率低下&#xff0c;容易出现错误和漏洞&#xff0c;无法满足快速发展的市场需求。因此&#xff0c;开发一套集成…

C#DLL热加载|动态替换

我有一个项目 开始取数据和结束数据部分是一样的&#xff0c;但中间处理数据是根据客户需求来转换的 又要求增加一个客户数据转换 主程序是不能停下来的 所以这个项目转数据转换部分做成插件式 每个客户的数据转换都是一个项目 都是一个DLL 主程序里面定义好接口类或者抽象…

Nginx+Tomcat 动静分离

1. NginxTomcat 环境 Nginx 处理静态资源的优势同样可以应用在 Tomcat 环境中 。从实现方法上来说&#xff0c;NginxTomcat 环境的搭建思路与前面完成的 NginxApache 环境是完全相同的&#xff0c;只需要将 Nginx 与 Tomcat 的站点文档目录配置到同一目录下&#xff0c;利用 N…

什么是SMO算法

SMO算法&#xff08;Sequential Minimal Optimization&#xff09; 是一种用于求解 支持向量机&#xff08;SVM&#xff09; 二次规划对偶问题的优化算法。它由 John Platt 在 1998 年提出&#xff0c;目的是快速解决 SVM 的优化问题&#xff0c;特别是当数据集较大时&#xff…

npm安装过程的问题

报错信息C:\Users\lyyds>npm list -global npm error code ENOENT npm error syscall lstat npm error path D:\nodejs\node_global npm error errno -4058 npm error enoent ENOENT: no such file or directory, lstat D:\nodejs\node_global npm error enoent This is rel…

数通自学——VLAN虚拟局域网,eNSP实验讲解

VLAN虚拟局域网&#xff0c;eNSP实验讲解 一、概念二、eNSP仿真实验1、实验一&#xff1a;vlan演示&#xff08;交换机端口access模式&#xff09;2、实验二&#xff1a;vlan演示&#xff08;交换机端口trunk模式&#xff09; 一、概念 VLAN&#xff08;Virtual Local Area Ne…

HarmonyOS应用开发者中级认证——中级闯关习题参考答案大全

文章目录 HarmonyOS第一课 ArkUI进阶判断题单选题多选题 HarmonyOS第一课 应用程序框架进阶判断题单选题多选题 HarmonyOS第一课 合理使用动画和转场判断题单选题多选题 HarmonyOS第一课 Web组件和WebView判断题单选题多选题 HarmonyOS第一课 给应用添加通知和提醒判断题单选题…

SQL-lab靶场less1-4

说明&#xff1a;部分内容来源于网络&#xff0c;如有侵权联系删除 前情提要&#xff1a;搭建sql-lab本地靶场的时候发现一些致命的报错&#xff1a; 这个程序只能在php 5.x上运行&#xff0c;在php 7及更高版本上&#xff0c;函数“mysql_query”和一些相关函数被删除&#xf…

java中的二叉树

二叉树 树型结构概念相关概念树的表示形式树的应用 二叉树概念两种特殊的二叉树二叉树的性质二叉树的存储二叉树的基本操作前置说明二叉树的遍历二叉树的基本操作 二叉树相关OJ题 树型结构 概念 树是一种非线性的的数据结构&#xff0c;它是由n(n>0)个有限结点组成一个具有…

贵州鑫宏远农业-始终致力于推动现代农业的科技创新与发展

贵州鑫宏远农业科技有限公司&#xff0c;是一家在高科技农业领域深耕细作、锐意进取的企业。自成立以来&#xff0c;我们始终致力于推动现代农业的科技创新与发展&#xff0c;业务全面覆盖农业科学研发、组织培养生产、专业育苗培植、半成品及成品精细化养护、市场销售以及全方…

数组与 ArrayList 有什么区别?

数组是一种基本的数据结构&#xff0c;在 Java 中&#xff0c;数组是一段连续的内存空间&#xff0c;用来存储固定数量的同类型元素。 数组的大小在创建时确定&#xff0c;并且在之后不可改变。 特点&#xff1a; 固定大小&#xff1a;数组的长度是固定的&#xff0c;一旦创…

RPA技术重塑企业自动化的未来

1. RPA定义与原理 1.1 机器人流程自动化(RPA)概念 机器人流程自动化&#xff08;Robotic Process Automation&#xff0c;简称RPA&#xff09;是一种软件技术&#xff0c;通过模拟人类用户在计算机界面上的操作来执行重复性的业务流程任务。RPA软件机器人能够自动执行基于规则…

对比两个el-table,差异数据突显标记

前言 在数据分析和数据处理的过程中&#xff0c;经常需要对比两个数据集&#xff0c;以便发现其中的差异和变化。本文将介绍如何使用 el-table 组件来对比两个数据集&#xff0c;并通过差异数据的突显标记&#xff0c;帮助用户更直观地理解数据的变化。 cell-style 属性 其实利…

如何用 obdiag 排查 OceanBase数据库的卡合并问题——《OceanBase诊断系列》14

1. 背景 卡合并在OceanBase中是一个复杂的问题&#xff0c;其产生可能源于多种因素。目前&#xff0c;对于卡合并的明确界定尚不存在统一标准&#xff0c;一方面&#xff0c;我们界定超过36小时未完成合并为合并超时&#xff0c;此时RS会记录ERROR日志&#xff1b;另一方面&am…

4个硬盘数据修复攻略:让你的数据失而复得。

据统计&#xff0c;在硬盘数据丢失的情况当中&#xff0c;有7成是因误删除、格式化和病毒攻击导致的。并且对与很多人来说&#xff0c;数据丢失是一个不小的问题。今天我就给大家分享几款能够帮助硬盘恢复数据的工具&#xff0c;希望能够在数据丢失是减小大家的焦虑。 1、福昕硬…

mac nwjs程序签名公证(其他mac程序也一样适用)

为什么需要公证 mac os14.5之后的系统&#xff0c;如果不对应用进行公证&#xff0c;安装&#xff0c;打开&#xff0c;权限使用上都会存在问题&#xff0c;而且有些问题你强制开启&#xff08;sudo spctl --master-disable&#xff09;使用后可能会有另外的问题&#xff0c; …

Python+pytest接口自动化之session会话保持的实现

前言 在接口测试的过程中&#xff0c;经常会遇到有些接口需要在登录的状态下才能请求&#xff0c;否则会提示请登录&#xff0c;那么怎样解决呢&#xff1f;我们可以通过Cookie绕过登录&#xff0c;其实这就是保持登录状态的方法之一。那么今天笔者想讲通过session进行会话保持…

衡石分析平台系统分析人员手册-导入图表库图表

导入图表库图表​ 本文讲述在仪表盘中如何使用图表库图表&#xff0c;如果您还不了解图表库&#xff0c;请先点击链接了解它的功能和作用。 在数据集市中建立图表库后&#xff0c;分析人员可以在应用创作中引用图表库图表&#xff0c;快速的进行数据分析工作。 导入图表库图…