acwing算法基础之搜索与图论--BFS

目录

  • 1 基础知识
  • 2 模板
  • 3 工程化

1 基础知识

BFS可以用来求取最短路,前提条件是所有边的权重一样。

2 模板

题目1:走迷宫,从左上角走到右下角,求最短路。

#include <iostream>
#include <queue>
#include <cstring>using namespace std;const int N = 110;
int d[N][N];
int g[N][N];
int n, m;int bfs() {memset(d, -1, sizeof d);queue<pair<int,int>> q;q.push({0,0});d[0][0] = 0;int dir[4][2] = {{-1,0}, {1,0}, {0,-1}, {0,1}};while (!q.empty()) {auto t = q.front();q.pop();//t下一步可以走到哪儿for (int k = 0; k < 4; ++k) {int x = t.first + dir[k][0], y = t.second + dir[k][1];if (x >= n || x < 0 || y >= m || y < 0) continue;if (g[x][y] == 1) continue;if (d[x][y] != -1) continue;d[x][y] = d[t.first][t.second] + 1;q.push({x,y});}}return d[n-1][m-1];
}int main() {cin >> n >> m;for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {cin >> g[i][j];}}cout << bfs() << endl;return 0;
}

扩展写法:输出最短路的路径。

#include <iostream>
#include <queue>
#include <cstring>using namespace std;const int N = 110;
int d[N][N];
int g[N][N];
int n, m;
pair<int,int> before[N][N]; //存储前一个结点int bfs() {memset(d, -1, sizeof d);queue<pair<int,int>> q;q.push({0,0});d[0][0] = 0;int dir[4][2] = {{-1,0}, {1,0}, {0,-1}, {0,1}};while (!q.empty()) {auto t = q.front();q.pop();//t下一步可以走到哪儿for (int k = 0; k < 4; ++k) {int x = t.first + dir[k][0], y = t.second + dir[k][1];if (x >= n || x < 0 || y >= m || y < 0) continue;if (g[x][y] == 1) continue;if (d[x][y] != -1) continue;d[x][y] = d[t.first][t.second] + 1;before[x][y] = t;q.push({x,y});}}//输出最短路的路径int i = n - 1, j = m - 1;while (i | j) {cout << "i = " << i << ", j = " << j << endl;pair<int,int> t = before[i][j];i = t.first;j = t.second;}return d[n-1][m-1];
}int main() {cin >> n >> m;for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {cin >> g[i][j];}}cout << bfs() << endl;return 0;
}

3 工程化

暂无。。。

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

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

相关文章

《嵌入式虚拟化技术与应用》:深入浅出阐述嵌入式虚拟机原理,实现“小而能”嵌入式虚拟机!

随着物联网设备的爆炸式增长和万物互联应用的快速发展&#xff0c;虚拟化技术在嵌入式系统上受到了业界越来越多的关注、重视和实际应用。嵌入式系统与虚拟化技术这个跨界创新组合应运而生&#xff0c;其典型的应用场景包括软件定义汽车驾驶舱、工业领域的工作负载整合等。 虚…

PHP网站源码 知识付费分站代理自助下单系统 自带多款模板

源码测评&#xff1a;功能很齐全&#xff0c;有可以对接的总站&#xff0c;应该是对接好就可以推广赚钱了&#xff0c;但是这种感觉能赚钱的就那么几个人&#xff0c;见仁见智吧&#xff01; 截图演示&#xff1a; 转载自 https://www.qnziyw.cn/cmsmb/qtcms/3952.html

Go进阶之rpc和grpc

文章目录 Go环境安装1&#xff09;windows2&#xff09;linux go语言编码规范1.1 包名&#xff1a;package1.2 ⽂件名1.3 结构体命名1.4 接⼝命名1.5 变量命名1.6 常量命名2.1 包注释2.2 结构&#xff08;接⼝&#xff09;注释2.3 函数&#xff08;⽅法&#xff09;注释2.4 代码…

Javascript知识点详解:正则表达式

目录 RegExp 对象 概述 实例属性 实例方法 RegExp.prototype.test() RegExp.prototype.exec() 字符串的实例方法 String.prototype.match() String.prototype.search() String.prototype.replace() String.prototype.split() 匹配规则 字面量字符和元字符 转义符…

python使用pysqlcipher3对sqlite数据库进行加密

python对很多项目都需要对sqlite数据库的数据进行加密&#xff0c;最流行的加密方式是使用pysqlcipher3&#xff0c;当前使用的python版本为3.7&#xff0c;本博文是直接使用pysqlcipher3在项目上的应用&#xff0c;使用的是已编译好的pysqlcipher3包&#xff0c;如果你需要pys…

使用Python调用API接口获取淘宝商品数据

一、引言 随着互联网的发展&#xff0c;电子商务已经成为了我们生活中不可或缺的一部分。淘宝作为中国最大的电子商务平台&#xff0c;其商品种类繁多&#xff0c;价格透明&#xff0c;购物方便&#xff0c;深受消费者的喜爱。然而&#xff0c;淘宝的商品数据量庞大&#xff0…

基于TI 与ADIDSP音频项目实战

基于空时域的声反馈抑制系统 项目描述软件环境&#xff1a;MATLAB、CCS开发工具&#xff1a;TMS320C6748DSP、TLV320A1C23B音频编解码芯片、功放、扬声器、 麦克风项目简述&#xff1a; 本项目研制一种具有声反馈抑制功能的麦克风阵列产品&#xff0c;应用于教室及中小型会议…

Java定时任务实现

Java定时任务实现 Java 定时任务 JAVA实现定时任务的几种方式 Java实现定时任务的方法总结

爱剪辑如何将视频旋转90度,详细操作流程

爱剪辑是一款电脑端常用的视频剪辑类软件&#xff0c;基本上囊括了视频剪辑所需的所有功能&#xff0c;此处主要介绍&#xff0c;爱剪辑是如何对视频进行旋转操作的&#xff0c;水平旋转或者垂直旋转爱剪辑都是可以操作的&#xff0c;整体操作的详细过程将在下方为大家讲解。 …

使用TS进行Vue-Router的Meta类型扩展

文章目录 1、前言2、解决 1、前言 使用Vue-Router时&#xff0c;会将一些字段信息附加到路由的Meta对象里面&#xff0c;比如图标icon&#xff0c;标题&#xff0c;权限等&#xff0c;如下&#xff1a; {path: /billboard/board/:boardId,name: billboardBoard,props: true,c…

js异步解决方案的发展历程

JavaScript是一种广泛使用的编程语言&#xff0c;用于开发Web应用程序。在Web开发中&#xff0c;异步编程是一种重要的技术&#xff0c;它允许在执行长时间运行的操作时不阻塞用户界面。随着JavaScript的发展&#xff0c;异步编程解决方案也在不断演进。本文将探讨JavaScript异…

python实现FINS协议的TCP服务端(篇一)

python实现FINS协议的TCP服务端是一件稍微麻烦点的事情。它不像modbusTCP那样&#xff0c;可以使用现成的pymodbus模块去实现。但是&#xff0c;我们可以根据协议帧进行组包&#xff0c;自己去实现帧的格式&#xff0c;而这一切可以基于socket模块。本文为第一篇。 一、了解FI…

SoC和微控制器(MCU)

目录 SoCSTM32F407IGT6 MCUSTM32 SoC SoC是一种集成电路&#xff0c;将多个功能模块集成在一个芯片上&#xff0c;包括处理器、内存、外设接口、通信接口等。SoC通常用于嵌入式系统、移动设备和物联网等领域&#xff0c;提供了丰富的功能和性能。 STM32F407IGT6 STM32F407IG…

Jquery 老项目引入vue,elementui

背景&#xff1a; juery是一个广泛使用的JavaScript库&#xff0c;用于简化DOM操作、事件处理、动画效果等常见任务。 Vue是一个现代化的JavaScript框架&#xff0c;专注于构建可复用的组件和实现响应式数据绑定。在开发jQuery项目时&#xff0c;我们常常需要在JavaScript代码…

MTK_ISP模块调试总结

目录 一、多帧丢帧确认 二、4G平台高ISO黑白噪去除 三、PD补偿确认 四、5G平台CA-LTM修改 五、四角偏暗case 六、ISO档位不匹配 七、5G平台多帧参数不生效 八、验证ISP通道参数生效方法

java实现wav的重采样

在处理一些用户上传的音频的时候&#xff0c;往往根据用户的设备不通&#xff0c;文件格式难以统一&#xff0c;尤其是涉及到算法模型相关的&#xff0c;更是令人头疼&#xff0c;这里提供两种思路解决这个问题。 不借助三方库 这种采用的是javax.sound.sampled下的包来实现&a…

H5横屏适配方案

横屏模式一般使用场景比较少&#xff0c;特殊情况除外&#xff0c;一般用于游戏、操作性比较大的网页会采用横屏 整体代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" conte…

事务码增删查改表数据

常用事务码 SE11 SE14 SE16 SE16N SM30 SE11:查看数据库表/修改表中字段数量_类型/查看表中数据/设置表为可维护或不可维护 SE14:查看数据库表的创建日期创建用户名/查看表中字段/删除表中全部数据(只能全部删) SE16:查看数据库表/对可维护数据库表进行数据维护/SE16通过调试…

python语法杂记

python基础&#xff1a; 1)常用的数据结构(集合) 数据双向链表queue:队列和栈 排序字典:orderrdDict 计数器:counter 2)模块 什么是模块&#xff1f; 什么是包及如何使用第三方包&#xff1f; 模块使用总结&#xff1f; 3)函数 自定义函数一般格式&#xff1b; 函数参数中…

牛客网面试必刷TOP101--C++详细题解

题目 NC65 斐波那契数列NC103 反转字符串NC141 判断是否为回文字符串NC151 最大公约数NC4 判断链表中是否有环NC7 买卖股票的最好时机(一) NC65 斐波那契数列 题目描述&#xff1a; 分析&#xff1a; 使用递归求解&#xff0c;当输入参数等于1、2时返回整数1 class Solution …