c++Dijkstra算法

求单源最短路问题

#include<iostream>
#include<cstring>
using namespace std;
const int N=1001;
const int M=10001;
struct edge{//v表示这条边连接顶点编号//w边权 。next下一条边的顶点编号 int v,w,next;edge(){}edge(int _v,int _w,int _next){v=_v;w=_w;next=_next;}
}e[M*2]; //这个e数组里就是每一条边 
int head[N],size;
void init(){memset(head,-1,sizeof(head));size=0; //当前图中一共有多少条边 
}
void insert(int u,int v,int w){e[size]=edge(v,w,head[u]);head[u]=size;size++;
}
void insert2(int u,int v,int w){insert(u,v,w);insert(v,u,w);
}
int n,m;
int dis[N];  //dis数组表示源点到某个点的最短路径 
bool vis[N]; //表示这个点有没有被标记过 
void dijkstra(int u){memset(vis,false,sizeof(vis));memset(dis,0x3f,sizeof(dis));  //memset是逐字符赋值的 dis[u]=0;for(int i=0;i<n;i++){// mind两点距离初始是正无穷,minj表示点的编号,初始是-1 int mind=1000000000,minj=-1; for(int j=1;j<=n;j++){   //表示顶点编号从1开始 if(!vis[j]&&dis[j]<mind){minj=j;mind=dis[j];}}if(minj==-1){ //不是连通图,直接结束循环 return;}vis[minj]=true;for(int j=head[minj];~j;j=e[j].next){ //~j表示j!=-1 int v=e[j].v;int w=e[j].w;if(!vis[v]&&dis[v]>dis[minj]+w){dis[v]=dis[minj]+w;}}}	
}
int main(){init();//初始化邻接表 int u,v,w;//n表示源点第n个顶点的最短路径//m表示m条无向边 cin>>n>>m; while(m--){cin>>u>>v>>w;insert2(u,v,w); //插入无向边 }dijkstra(1);   //从第一个顶点开始 cout<<dis[n]<<endl;return 0;
}
//3 3
//1 2 5
//2 3 5
//3 1 2
//2

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

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

相关文章

Android 14 init进程解析

前言 当bootloader启动后&#xff0c;启动kernel&#xff0c;kernel启动完后&#xff0c;在用户空间启动init进程&#xff0c;再通过init进程&#xff0c;来读取init.rc中的相关配置&#xff0c;从而来启动其他相关进程以及其他操作。 init进程启动主要分为两个阶段&#xff1…

jsPDF + html2canvas + Vue3 + ts项目内,分页导出当前页面为PDF、A 页面内导出 B 页面的内容为PDF,隐藏导出按钮等多余元素

jsPDF html2canvas Vue3 ts Arco Design项目&#xff0c;分页导出当前页面为PDF、A 页面内导出 B 页面的内容为PDF&#xff0c;隐藏导出按钮等多余元素… 1.下载所需依赖 pnpm install --save html2canvaspnpm install --save jspdf引入依赖 <script setup lang"…

OpenCV 库来捕获和处理视频输入和相似度测量(73)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV的周期性噪声去除滤波器(70) 下一篇 :OpenCV系列文章目录&#xff08;持续更新中......&#xff09; ​ 目标 如今&#xff0c;拥有数字视频录制系统供您使用是很常见的。因此&#xff0c;您…

flutter页面异常监测

flutter页面异常监测 在Flutter中&#xff0c;通常用FlutterError监测Flutter框架抛出的异常&#xff0c;用runZonedGuarded监测应用中用户代码异常。 class AppGuarded { run(Widget app) { //1. 用FlutterError监测flutter框架抛出的异常 FlutterError.onError (FlutterErr…

FreeBSD RISCV 在QEME中实践-网络配置

在前一篇文章中&#xff0c;我们一起进行了FreeBSD RISCV 在QEME中实践 现在&#xff0c;让我们配置好网络吧&#xff01; 先上结论&#xff1a;用默认配置启动即可&#xff0c;网络就加载好了&#xff0c;只是不能ping罢了。因为不能ping&#xff0c;以为网络没通&#xff0…

opencv图片的平移-------c++

图片平移 cv::Mat opencvTool::translateImage(const cv::Mat& img, int dx, int dy) {// 获取图像尺寸int rows img.rows;int cols img.cols;// 定义仿射变换矩阵cv::Mat M (cv::Mat_<float>(2, 3) << 1, 0, dx, 0, 1, dy);// 进行仿射变换cv::Mat dst;cv…

[附源码+视频教程]暗黑纪元H5手游_架设搭建_畅玩三网全通西方3D世界_带GM

本教程仅限学习使用&#xff0c;禁止商用&#xff0c;一切后果与本人无关&#xff0c;此声明具有法律效应&#xff01;&#xff01;&#xff01;&#xff01; 教程是本人亲自搭建成功的&#xff0c;绝对是完整可运行的&#xff0c;踩过的坑都给你们填上了 一. 演示视频 暗黑纪…

目标检测——水下垃圾数据集DeepTrash

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

[图解]不变式的构造和化简

1 00:00:02,420 --> 00:00:03,380 下面这个&#xff0c;我们来看 2 00:00:03,390 --> 00:00:09,940 X→select&#xff08;Y&#xff09;&#xff0c;用Y这个条件来筛选 3 00:00:09,950 --> 00:00:11,340 之后得到的集合 4 00:00:12,400 --> 00:00:14,390 forAl…

SD-WAN介绍,为何成为主推。

1、SD-WAN&#xff08;Software Defined Wide Area Network&#xff0c; 软件定义的广域网&#xff09; 将企业的分支、总部和多云之间互联起来&#xff0c;应用在不同混合链路&#xff08;MPLS&#xff0c;Internet&#xff0c;5G&#xff0c;LTE等&#xff09;之间选择最优的…

EmotionBench—— 基于 LLM 情绪的量化框架

介绍 大型语言模型&#xff08;LLM&#xff09;在近年来取得了显著的进展&#xff0c;这在计算机科学领域被视为一个重要的里程碑。像ChatGPT和Claude这样的综合性软件已经不再仅仅是用于句子校正、文本翻译和编程的工具&#xff0c;它们已经演进成为类似于人类的助手。因此&a…

Linux 操作系统IPC

目录 1、IPC简介 1.1、共享内存 1.1.1 创建/访问共享内存 1.1.2 映射 1.1.3 解除映射 1.1.4 删除/修改共享内存 1.2 信号量集 1.2.1 创建信号量集合 1.2.2 信号量的初始化 1.2.3 信号量的还原和消耗 1.3 消息队列 1.3.1 概念 1.3.3 添加消息队列 1.3.4 读取消息…

Linux 系统下的一些常用命令和用法

keywords: Linux 类 Unix 系统下的一些常用命令和用法。 实用命令 fuser 查看文件被谁占用。 fuser -u .linux.md.swpid 查看当前用户、组 id。 lsof 查看打开的文件列表。 An open file may be a regular file, a directory, a block special file, a character speci…

Spring Cloud Gateway的部署

不要将 Spring Cloud Gateway 部署到 Tomcat 可以将Spring Cloud Gateway打成jar包&#xff0c;并通过jar包部署&#xff0c;步骤&#xff1a; 1. 修改构建配置 确保你的pom.xml文件中的打包方式为jar。 <packaging>jar</packaging> 2 打包项目 mvn clean pack…

社区养老服务|基于Springboot+vue的社区养老服务平台设计与实现(源码+数据库+文档)

社区养老服务平台 目录 基于Java的社区养老服务平台设计与实现 一、前言 二、系统设计 三、系统功能设计 1用户信息管理 2 服务信息管理 3服务申请管理 4公告信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#…

【Linux系统化学习】网络套接字(编写简单的UDP服务端和客户端)

目录 理解源IP地址和目的IP地址 认识端口号 端口号和进程ID的区别 源端口号和目的端口号 认识TCP和UDP协议 TCP协议 UDP协议 网络字节序 socket编程接口 socket常见API sockaddr结构 简单的UDP网络程序 UDP服务端 创建套接字 填充本地网络信息 绑定 收取消息 …

Amine-PEG-Amine,956496-54-1在生物成像、生物传感器等领域具有广泛的应用

【试剂详情】 英文名称 Amine-PEG-Amine&#xff0c;NH2-PEG-NH2 中文名称 氨基-聚乙二醇-氨基&#xff0c;氨基PEG氨基&#xff0c; 双端氨基聚乙二醇 CAS号 956496-54-1 外观性状 由分子量决定&#xff0c;液体或者固体 分子量 0.4k&#xff0c;0.6k&#xff0c;1k&…

5.3作业

这个声明定义了一个名为 s 的数组&#xff0c;数组包含 10 个元素&#xff0c;每个元素都是一个函数指针。(1)C (2)D (3)C (4)DE (5)C8 11 14(1)int IsFull(sequeue *seqn) { return ((seqn->frnt ((seqn->rear 1) % N)) ? 1 : 0); } (2)int IsEmpty(sequ…

C++命令行系统(三)

1 概述 在嵌入式开发中&#xff0c;经常会利用命令行交互系统测试功能&#xff0c;本文描述使用C语言开发的一个命令行交互系统&#xff0c;支持命令注册(C或C格式)&#xff0c;命令分组&#xff0c;执行命令&#xff0c;显示命令提示。 4 实例 4.1 实例代码 extern "C…

千古一帝秦始皇的一生

在中国历史上&#xff0c;秦始皇绝对是最有资格被称之为‘千古一帝’的皇帝。 这不光是因为&#xff0c;他是中国的第一个皇帝&#xff0c;更是因为他奠定了中国两千多年的政治格局&#xff0c;让中国从此有了大一统的意识。 1、赵国生涯 公元前259年&#xff0c;秦始皇嬴政…