数据结构——最短路(BFS,Dijkstra,Floyd)

完整版可以看我的最短路问题模版总结_稠密图最短路-CSDN博客

考研数据结构只考BFS,Dijkstra和Floyd

下面代码以Acwing模板题为例

BFS代码

适用类型:

1.单源最短路径

2.无权图

3.不适用于带权图和负权回路图

//Acwing走迷宫bfs
#include<bits/stdc++.h>using namespace std;const int N = 110;typedef pair<int,int> PII;int g[N][N];bool st[N][N];int dx[4]={-1,0,1,0};int dy[4]={0,-1,0,1};int n,m;int ans[N][N];void bfs(int x,int y)
{queue<PII> q;q.push({x,y});while(!q.empty()){auto t = q.front();q.pop();for(int i=0;i<4;i++){int nex = t.first + dx[i];int ney = t.second + dy[i];if(nex>=1&&nex<=n&&ney>=1&&ney<=m&&!st[nex][ney]&&g[nex][ney]==0){q.push({nex,ney});ans[nex][ney]=ans[t.first][t.second]+1;st[nex][ney]=true;}}}
}int main()
{cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>g[i][j];}}bfs(1,1);cout<<ans[n][m]<<endl;return 0;
}

Dijkstra代码(O(n^2))

适用类型:

1.单源最短路径

2.正权图

3.不适用于负权图和负权回路图

#include <bits/stdc++.h>using namespace std;
#define fs first
#define sc second
#define endl '\n'
#define all(x) x.begin(), x.end()
typedef long long ll;
typedef pair<int, int> PII;const int N = 510;int dist[N];//dist[i]表示i号点到源点的距离int st[N];//表示一个最短路径的点集合 若为1表示在集合中 若为0表示不在集合中 全局初始为0int g[N][N];//邻接矩阵存储int n,m;//点和边int Dijkstra()
{//初始化memset(dist,0x3f,sizeof(dist));//memset按字节赋值 赋值完是0x3f3f3f3fdist[1]=0;for(int i=1;i<=n;i++){int t=-1;for(int j=1;j<=n;j++){if(!st[j]&&(t==-1||dist[j]<dist[t])){t=j;}}//内层循环执行完后便找到了在集合st外距离源点(这里默认为1)最近的点st[t]=1;//加入集合//用t来更新距离for(int k=1;k<=n;k++){dist[k]=min(dist[k],dist[t]+g[t][k]);}}if(dist[n]==0x3f3f3f3f)return -1;//1——>n不连通return dist[n];
}int main(){cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);memset(g,0x3f,sizeof(g));cin>>n>>m;for(int i=0;i<m;i++){int a,b,c;cin>>a>>b>>c;g[a][b]=min(g[a][b],c);}cout<<Dijkstra()<<endl;return 0;
}

Floyd代码 (O(n^3))

适用类型:

1.多源最短路径

2.正、负权图

3.适用于负权,不适用于负权回路图

#include <iostream>
using namespace std;const int N = 210, M = 2e+10, INF = 1e9;int n, m, k, x, y, z;
int d[N][N];void floyd() {for(int k = 1; k <= n; k++)for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}int main() {cin >> n >> m >> k;for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)if(i == j) d[i][j] = 0;else d[i][j] = INF;while(m--) {cin >> x >> y >> z;d[x][y] = min(d[x][y], z);//注意保存最小的边}floyd();while(k--) {cin >> x >> y;if(d[x][y] > INF/2) puts("impossible");else cout << d[x][y] << endl;}return 0;
}

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

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

相关文章

ftp替代品,如何提升数据交换的安全性与高效性?

文件传输协议&#xff08;FTP&#xff09;是一个跨平台的、简单且易于实现的协议&#xff0c;用于在网络上的服务器和客户端之间传输文件&#xff0c;也是企业会经常选择的一种传输方式。 业务场景一&#xff1a; 基于信息相关安全要求&#xff0c;医院会采用防火墙、网闸等将…

单片机开发资源分析的实战——以STM32G431RBT6为例子的单片机资源分析

目录 第一点&#xff1a;为什么叫STM32G431RBT6 从资源手册拿到我们的对STM32G431RBT6的资源描述 第二件事情&#xff0c;关心我们的GPIO引脚输出 第三件事情&#xff1a;去找对应外设的说明部分 第一点&#xff1a;为什么叫STM32G431RBT6 对于命名规则不太熟悉的朋友看这里…

Android PC 要来了?Android 16 Beta3 出现 Enable desktop experience features 选项

在之前的 《Android 桌面窗口新功能推进》 我们就聊过&#xff0c;Google 就一直在努力改进 Android 的内置桌面模式&#xff0c;例如添加了适当的窗口标题、捕捉窗口的能力、悬停选项、窗口大小调整、最小化支持、app-to-web 等。 比如在搭载 Android 15 QPR 1 Beta 2 的 Pix…

IP关联是什么?怎么避免?

在跨境电商的道路上&#xff0c;大家好&#xff01;今天想和大家聊一聊一个非常重要的话题&#xff0c;那就是IP关联的问题。在商业活动中&#xff0c;了解如何避免IP关联对保护我们宝贵的商铺至关重要。接下来&#xff0c;我们将深入探讨IP关联的概念、影响及如何有效防止这一…

行为模式---状态模式

概念 状态模式是一种行为模式&#xff0c;用于在内部状态改变的时候改变其行为。它的核心思想就是允许一个对象在其内部状态改变的时候改变它的行为。状态模式通过将对象的状态封装成独立的类&#xff0c;并将其行为委托给当前的状态对象&#xff0c;从而使得对象行为随着状态…

目标检测中衡量模型速度和精度的指标:FPS和mAP

“FPS”和“mAP”分别衡量了模型的速度和精度。 FPS&#xff08;Frames Per Second&#xff09; 定义&#xff1a;FPS是“每秒传输帧数”的缩写&#xff0c;用于衡量计算机视觉系统&#xff08;如目标检测、图像识别等&#xff09;的实时性能。它表示系统每秒钟能够处理的图像…

网页复印机:只需一个网址,一键克隆任何网站!(可根据需求生成/优化相关代码)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 网页代码克隆神器:一键复刻精美设计,提升前端开发效率 📒🛠️ 使用⚓️ 相关链接 ⚓️📖 介绍 📖 每天对着别人的精美网站漏出羡慕的眼神,却苦于自己的前端技术不够硬,难以完美复刻?或者为了赶项目进度,不得不重复…

go语言中数组、map和切片的异同

在Go语言中&#xff0c;数组、切片&#xff08;slice&#xff09;和映射&#xff08;map&#xff09;是三种常用的数据结构&#xff0c;它们在用途和特性上有显著差异。以下是它们的异同总结&#xff1a; 相同点 集合类型&#xff1a;三者都用于存储一组数据。 元素访问&#…

前端Vue3图像编辑功能(并生成mask图)

存在一个需求同豆包的图像生成的区域重绘功能,类似与下面这种 拆解一下需求, 1、鼠标移动上图像画面时出现跟随鼠标移动的空心圆形,移出图像画面、鼠标点击后、鼠标按下移动时消失,鼠标松开再次出现。 2、鼠标按下出现圆形透明颜色大小同空心圆形、鼠标按下移动形成轨迹,…

解决:ModuleNotFoundError: No module named ‘_sqlite3‘

报错&#xff1a; from _sqlite3 import * ModuleNotFoundError: No module named _sqlite3安装sqlite3支持组件: sudo apt-get install libsqlite3-dev进入之前下载的python包下&#xff0c;重新编译和安装Python ./configure --enable-loadable-sqlite-extensions make &a…

【Go语言圣经3.6】

目标 概念 常量与变量的主要区别在于&#xff1a; 不可变性&#xff1a;常量在声明后其值就固定下来&#xff0c;不能再被修改。这保证了程序运行时不会因意外修改而导致错误。 使用不可变数据&#xff08;例如数学常数 π&#xff09;可以避免意外修改带来的问题 编译期计算…

基于x11vnc的ubuntu远程桌面

1、安装VNC服务 sudo apt install x11vnc -y2、创建连接密码 sudo x11vnc -storepasswd3、安装lightdm服务 x11vnc 在 默认的 GDM3 中不起作用&#xff0c;因此需要使用 lightdm 桌面管理环境 sudo apt install lightdm -y切换至lightdm&#xff0c;上一步已经切换则跳过该…

leetcode日记(105)买卖股票的最佳时机Ⅱ

原本以为是一个很难想的动态规划&#xff0c;没想到是最简单的贪心…… 如果实在想不出就画个折线图&#xff0c;只买上涨的就行了&#xff0c;所有上涨的段都取到。 真的没想到会这么简单…… class Solution { public:int maxProfit(vector<int>& prices) {int …

手写发布订阅模式

手写实现一个简易的发布订阅模式&#xff0c;通常有以下几个关键点&#xff1a; 订阅&#xff08;subscribe&#xff09;&#xff1a;用户订阅特定的事件&#xff0c;当该事件触发时&#xff0c;执行与事件关联的回调函数。 发布&#xff08;publish&#xff09;&#xff1a;当…

docker入门篇

使用docker可以很快部署相同的环境,这也是最快的环境构建,接下来就主要对docker中的基础内容进行讲解.Docker 是一个用于开发、交付和运行应用程序的开源平台&#xff0c;它可以让开发者将应用程序及其依赖打包到一个容器中&#xff0c;然后在任何环境中运行这个容器&#xff0…

Qt Widgets、Qt Quick

一、核心概念 ‌Qt Widgets‌ Qt框架中的传统桌面UI开发组件库&#xff0c;基于C实现&#xff0c;提供按钮、文本框等控件‌。适用于需要深度集成操作系统底层功能或复杂业务逻辑的桌面应用‌。 ‌Qt Quick‌ QML的标准库和工具包&#xff0c;提供预置的视觉组件&#xff08;如…

LinuX---Shell正则表达式

正则表达式 正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文本编辑器里&#xff0c;正则表达式通常被用来检索、替换那些符合某个模式的文本。在Linux中&#xff0c;grep&#xff0c;sed&#xff0c;awk等命令都支持通过正则表达式进行模式匹配…

nginx配置txt文件点击链接后下载

手上有一个txt文件&#xff0c;上传到文件服务器后&#xff0c;点击路径是在浏览器里直接打开了&#xff0c;用户需要的是下载到本地 nginx新增配置 location ~* /ExcelDownload/envScript/(.\.txt) {add_header Content-Disposition "attachment; filename$1";add…

相机光学(四十七)——相纸材质

1. 光面相纸 光面相纸表面光滑&#xff0c;亮度高&#xff0c;反光性好&#xff0c;能够呈现出清晰、鲜艳的图像效果&#xff0c;适合用于表现色彩艳丽、反差要求较高的题材&#xff0c;如产品照、艺术照和风景照。然而&#xff0c;这种相纸容易沾上指纹和灰尘。 2. 绒面相纸…

LabVIEW 线性拟合

该 LabVIEW 程序实现了 线性拟合&#xff08;Linear Fit&#xff09;&#xff0c;用于计算给定一组数据点的斜率&#xff08;Slope&#xff09;和截距&#xff08;Intercept&#xff09;&#xff0c;并将结果可视化于 XY Graph 中。本案例适用于数据拟合、实验数据分析、传感器…