DFS和BFS的模版

news2025/4/17 21:47:18

dfs

dfs金典例题理解就是走迷宫

P1605 迷宫 - 洛谷

image-20250408213319450

dfs本质上在套一个模版:

image-20250408213947949

image-20250408213958733

///dfs
#include<bits/stdc++.h>
using namespace std;
int a[10][10]={0};
int m,n,t,ans=0;
int ex,ey;
int v[10][10]={0};
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
void dfs(int x,int y){
	if(x==ex&&y==ey){
		ans++;
		return;
	}
	for(int i=0;i<4;i++){
		int nx=x+dx[i];
		int ny=y+dy[i];
//		判断是否越界
		if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&v[nx][ny]==0&&a[nx][ny]==0){
			v[nx][ny]=1;
			dfs(nx,ny);
			v[nx][ny]=0;
		}
	}
}
int main(){
	int x,y,t,t1,t2;
	cin>>n>>m>>t;
	cin>>x>>y>>ex>>ey;
	for(int i=0;i<t;i++){
		cin>>t1>>t2;
		a[t1][t2]=1;
	}
	if(x==ex&&y==ey){
		cout<<ans;
		return 0;
	}
	v[x][y]=1;
	dfs(x,y);
	cout<<ans;
	return 0;
}

P1238 走迷宫 - 洛谷

image-20250408214154504

//走迷宫
#include<bits/stdc++.h>
using namespace std;
int m,n;
int ex,ey,bg,ed;
int a[20][20]={0},v[20][20]={0};
int dx[4]={0,-1,0,1};
int dy[4]={-1,0,1,0};
bool flag=false;
vector<int>px;
vector<int>py;
void dfs(int x,int y){
	if(x==ex&&y==ey){
		flag=true;
		cout<<"("<<bg<<","<<ed<<")";
		for(int i=0;i<px.size();i++){
			cout<<"->("<<px[i]<<","<<py[i]<<")";
		}
		cout<<endl;
		return;
	}
	for(int i=0;i<4;i++){
		int nx=x+dx[i];
		int ny=y+dy[i];
		if(nx>=1&&ny>=1&&nx<=m&&ny<=n&&a[nx][ny]==1&&v[nx][ny]==0){
			v[nx][ny]=1;
			px.push_back(nx);
			py.push_back(ny);
			dfs(nx,ny);
			px.pop_back();
			py.pop_back();
			v[nx][ny]=0;
		}
	}
	
	
}
int main(){
	cin>>m>>n;
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
		}
	}
	int x,y;
	cin>>x>>y>>ex>>ey;
	bg=x;ed=y;
	v[x][y]=1;
	dfs(x,y);
	if(!flag)
		cout<<"-1";
	return 0;
}

套模版解决迷宫问题,good

dfs和bfs的主要区别和应用场景

image-20250408221743063

dfs适合去求有没有路径,使用类似大水冲灌的思想,bfs地毯式搜索

bfs

bfs模版如下:

void bfs()
{
	 初始化,初始状态存数组; 
	 int head=0,tail=1,que[max_size];//构建队列
	 标记初始点 
	 while(head<tail)
	 {
	 	head++;//指向待扩展结点
		for(i=1;i<=maxi;++i)
		{
			if(满足条件||不重复)
			{
				tail++;
				将新节点存入队列
			}	
		}
	}
}

P1443 马的遍历 - 洛谷

image-20250408222813997

//马走日
#include<bits/stdc++.h>
using namespace std;
int n,m;
int ans[500][500]={0};
int v[500][500]={0};
struct Queue{
	int x;
	int y;
}que[500110];
int dx[8]={-1,-2,-1,-2,1,2,2,1};
int dy[8]={-2,-1,2,1,-2,-1,1,2};
void bfs(int x,int y){
	int head=0,tail=1;
	int sum=0;
	while(head<tail){
		head++;
		sum=ans[que[head].x][que[head].y]+1;
		for(int i=0;i<8;i++){
			int nx=que[head].x+dx[i];
			int ny=que[head].y+dy[i];
			if(nx>=1&&ny>=1&&nx<=n&&ny<=m&&v[nx][ny]==0){
				v[nx][ny]=1;
				tail++;
				que[tail].x=nx;
				que[tail].y=ny;
				ans[nx][ny]=sum;
			}
		}	
	}

	
	
}
int main(){
	int x,y;
	cin>>n>>m>>x>>y;
	v[x][y]=1;
	que[1].x=x;
	que[1].y=y;
	bfs(x,y);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(ans[i][j]==0&&(i!=x||j!=y))
				cout<<left<<setw(5)<<"-1";
			else
				cout<<left<<setw(5)<<ans[i][j];
		}
		cout<<endl;
	}
	return 0;
}

陷阱:第一默认0为-1,排除的不是(1,1)而是(x,y)

第二更正好n,m,要知道什么行和列

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

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

相关文章

Ansible Playbook 进阶探秘:Handlers、变量、循环及条件判断全解析

192.168.60.100ansible.com192.168.60.110 client-1.com 192.168.60.120client-2.com192.168.60.130client-1.com 一、Handlers 介绍&#xff1a;在发生改变时执行的操作(类似puppet通知机制) 示例&#xff1a; 当apache的配置文件发生改变时&#xff0c;apache服务才会重启…

MATLAB的24脉波整流器Simulink仿真与故障诊断

本博客来源于CSDN机器鱼&#xff0c;未同意任何人转载。 更多内容&#xff0c;欢迎点击本专栏目录&#xff0c;查看更多内容。 目录 0 引言 1 故障数据采集 2 故障特征提取 3 故障诊断分类 4 结语 本博客内容是在MATLAB2023下完成。 0 引言 对于电力电子电路的故障诊断…

linux第三次作业

1、将你的虚拟机的网卡模式设置为nat模式&#xff0c;给虚拟机网卡配置三个主机位分别为100、200、168的ip地址 2、测试你的虚拟机是否能够ping通网关和dns&#xff0c;如果不能请修改网关和dns的地址 3、将如下内容写入/etc/hosts文件中&#xff08;如果有多个ip地址则写多行&…

国标GB28181视频平台EasyCVR顺应智慧农业自动化趋势,打造大棚实时视频监控防线

一、方案背景 近年来&#xff0c;温室大棚种植技术凭借其显著的优势&#xff0c;在提升农作物产量和质量、丰富农产品供应方面发挥了重要的作用&#xff0c;极大改善了人们的生活水平&#xff0c;得到了广泛的推广和应用。大棚内的温度、湿度、光照度和二氧化碳浓度等环境因素…

HOOPS Visualize:跨平台、高性能的三维图形渲染技术解析

在当今数字化时代&#xff0c;三维可视化技术已成为众多行业的核心竞争力。HOOPS Visualize作为一款功能强大的三维图形渲染引擎&#xff0c;凭借其卓越的渲染能力、跨平台支持、丰富的交互功能、高度定制化以及快速部署等特性&#xff0c;为开发人员提供了构建高质量、高性能3…

蓝桥杯 C/C++ 组历届真题合集速刷(一)

一、1.单词分析 - 蓝桥云课 &#xff08;模拟、枚举&#xff09;算法代码&#xff1a; #include <bits/stdc.h> using namespace std;int main() {string s;cin>>s;unordered_map<char,int> mp;for(auto ch:s){mp[ch];}char result_charz;int max_count0;fo…

多类型医疗自助终端智能化升级路径(代码版.上)

大型医疗自助终端的智能化升级是医疗信息化发展的重要方向,其思维链一体化路径需要围绕技术架构、数据流协同、算法优化和用户体验展开: 一、技术架构层:分布式边缘计算与云端协同 以下针对技术架构层的分布式边缘计算与云端协同模块,提供具体编程实现方案: 一、边缘节点…

区间 DP 详解

文章目录 区间 DP分割型合并型环形合并 区间 DP 区间 DP&#xff0c;就是在对一段区间进行了若干次操作后的最小代价&#xff0c;一般是合并和拆分类型。 分割型 分割型&#xff0c;指把一个区间内的几项分开拆成一份一份的&#xff0c;再全部合起来就是当前答案&#xff0c…

QAM 信号的距离以及能量归一化

QAM星座图平均功率能量_星座图功率计算-CSDN博客 正交幅度调制(QAM) - Vinson88 - 博客园 不同阶QAM调制星座图中&#xff0c;符号能量的归一化计算原理_qpsk的星座图归一化-CSDN博客 https://zhuanlan.zhihu.com/p/690157236

Reactive编程框架与工具

文章目录 6.2 后端 Reactive 框架6.2.1 Spring WebFlux核心架构核心组件实际应用高级特性性能优化适用场景与限制 6.2.2 Akka&#xff08;Actor模型&#xff09;Actor模型基础基本用法高级特性响应式特性实现性能优化实际应用场景优势与挑战 6.2.3 Vert.x&#xff08;事件驱动&…

Python爬虫第7节-requests库的高级用法

目录 前言 一、文件上传 二、Cookies 三、会话维持 四、SSL证书验证 五、代理设置 六、超时设置 七、身份认证 八、Prepared Request 前言 上一节&#xff0c;我们认识了requests库的基本用法&#xff0c;像发起GET、POST请求&#xff0c;以及了解Response对象是什么。…

Maven的安装配置-项目管理工具

各位看官&#xff0c;大家早安午安晚安呀~~~ 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 今天我们来学习&#xff1a;Maven的安装配置-项目管理工具 目录 1.什么是Maven&#xff1f;Maven用来干什么的&#xff1f…

智能 SQL 优化工具 PawSQL 月度更新 | 2025年3月

&#x1f4cc; 更新速览 本月更新包含 21项功能增强 和 9项问题修复&#xff0c;重点提升SQL解析精度与优化建议覆盖率。 一、SQL解析能力扩展 ✨ 新增SQL语法解析支持 SELECT...INTO TABLE 语法解析&#xff08;3/26&#xff09; ALTER INDEX RENAME/VISIBLE 语句解析&#…

Ubuntu虚拟机编译安装部分OpenCV模块方法实现——保姆级教程

Ubuntu虚拟机的安装过程可以查看另一篇文章&#xff1a;VMware安装Ubuntu虚拟机实现COpenCV代码在虚拟机下运行教程-CSDN博客 目前我们已经下载好了OpenCV&#xff0c;这里以OpenCV4.5.2为例。 在内存要求尽可能小的情况下&#xff0c;可以尝试只编译安装代码中使用到的OpenC…

spring mvc @ResponseBody 注解转换为 JSON 的原理与实现详解

ResponseBody 注解转换为 JSON 的原理与实现详解 1. 核心作用 ResponseBody 是 Spring MVC 的一个注解&#xff0c;用于将方法返回的对象直接序列化为 HTTP 响应体&#xff08;如 JSON 或 XML&#xff09;&#xff0c;而不是通过视图解析器渲染为视图&#xff08;如 HTML&…

skynet.rawcall使用详解及应用场景

目录 核心特性函数原型使用场景场景 1&#xff1a;高性能二进制传输&#xff08;如文件转发&#xff09;场景 2&#xff1a;自定义序列化协议&#xff08;如 Protocol Buffers&#xff09;场景 3&#xff1a;跨服务共享内存&#xff08;避免拷贝&#xff09; 配套接收方实现与 …

使用SpringSecurity下,发生重定向异常

使用SpringSecurity下&#xff0c;发生空转异常 环境信息&#xff1a; Spring Boot 3.4.4 &#xff0c; jdk 17 &#xff0c; springSecurity 6.4.4 问题背景&#xff1a; 没有自定义controller &#xff0c;改写了login 页面&#xff0c;并且进行了成功后的跳转处理&#xf…

Elasticsearch | ES索引模板、索引和索引别名的创建与管理

关注&#xff1a;CodingTechWork 引言 在使用 Elasticsearch (ES) 和 Kibana 构建数据存储和分析系统时&#xff0c;索引模板、索引和索引别名的管理是关键步骤。本文将详细介绍如何通过 RESTful API 和 Kibana Dev Tools 创建索引模板、索引以及索引别名&#xff0c;并提供具…

力扣hot100_回溯(2)_python版本

一、39. 组合总和&#xff08;中等&#xff09; 代码&#xff1a; class Solution:def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:ans []path []def dfs(i: int, left: int) -> None:if left 0:# 找到一个合法组合ans.append(pa…

LPDDR4内存颗粒命名规则全解析:三星、镁光、海力士、南亚、长鑫等厂商型号解码与选型指南

由于之前DDR的系列选型文章有很好的反馈&#xff0c;所以补充LPDDR4低功耗内存的选型和命名规则&#xff0c;总结了目前市面上常用的内存&#xff0c;供硬件工程师及数码爱好者参考。 在智能手机、平板电脑和低功耗设备中&#xff0c;LPDDR4 SDRAM凭借其高带宽、低功耗特性成为…