BFS专题7 多终点迷宫问题

news2024/11/26 13:28:56

题目:

样例:

输入
3 3
0 0 0
1 0 0
0 1 0
输出
0 1 2
-1 2 3
-1 -1 4

思路:

        单纯的 BFS 迷宫问题,只是标记一下每个点的 step,注意初始化答案数组都为 -1.

代码详解如下:

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <unordered_map>
#define endl '\n'
#define x first
#define y second
#define mk make_pair
#define YES puts("YES")
#define NO puts("NO")
#define umap unordered_map
#define All(x) x.begin(),x.end()
#pragma GCC optimize(3,"Ofast","inline")
#define ___G std::ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;

// 坐标
using PII = pair<int,int>;

const int N = 500;

// 地图
int n,m;
int g[N][N];

// 答案步数数组
int ans[N][N];

// 标记走动的坐标
bool st[N][N];

// 控制方向坐标
int dx[4] = {1,-1,0,0};
int dy[4] = {0,0,1,-1};

// 坐标走动条件
inline bool isRun(int &x,int &y)
{
	return (~x && ~y && x < n && y < m && !g[x][y] && !st[x][y]);
}

inline void BFS()
{
	int step = 0;
	
	queue<PII>q;
	// 存储起点
	q.push(mk(0,0));

	// 开始BFS
	while(q.size())
	{
		int sz = q.size();
		while(sz--)
		{
			auto now = q.front();
			q.pop();
			
			// 标记答案步数数组
			ans[now.x][now.y] = step;
			
			// 标记当前走动的坐标
			st[now.x][now.y] = true;
			
			// 开始寻找走动方向的坐标
			for(int i = 0;i < 4;++i)
			{
				int bx = now.x + dx[i];
				int by = now.y + dy[i];
				
				// 如果可以走动该方向
				if(isRun(bx,by))
				{
					// 标记并存储
					st[bx][by] = true;
					q.push(mk(bx,by));
				}
			}
		}
		++step;
	}
}

// 输出答案步数数组
inline void PrintAns()
{
	for(int i = 0;i < n;++i)
	{
		for(int j = 0;j < m;++j)
		{
			if(j) cout << ' ';
			cout << ans[i][j];
		}
		if(i < n) cout << endl;
	}
}

inline void solve()
{
	cin >> n >> m;
	for(int i = 0;i < n;++i)
	{
		for(int j = 0;j < m;++j)
		{
			cin >> g[i][j];
			
			// 答案数组初始化
			ans[i][j] = -1;
		}
	}
	
	// 开始BFS
	BFS();
	
	// 输出答案
	PrintAns();
}


int main()
{
//	freopen("a.txt", "r", stdin);
	___G;
	int _t = 1;
//	cin >> _t;
	while (_t--)
	{
		solve();
	}

	return 0;
}

最后提交:

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

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

相关文章

Windows下使用pybind11教程(python调用C++代码)

1. 下载pybind11 gittub中下载&#xff0c;pybind下载后解压 2. C生成库文件 2.1.VS新建空白工程&#xff0c;工程名随意起 - 2.2更改目标文件名和配置类型 - 2.3更改目标文件拓展名 2.4添加include路径和库路径 包含目录中添加刚刚下载好的pybind的include路径以及pyhon的…

C#的HALCON引擎调用_传入参数输出结果实现流程

1、在Halcon的开发环境里面写处理流程。 此案例使用HALCON自带图片&#xff1a; read_image (Image, printer_chip/printer_chip_01) 读入图片之后&#xff0c;做处理流程&#xff1a; *图像处理流程&#xff1a; *传入图像变量&#xff0c;阈值最小值&#xff0c;最大值。…

软件测试/测试开发丨利用人工智能自动找Bug

点此获取更多相关资料 简介 在程序员编程的过程中&#xff0c;产生Bug是一件平常的事情&#xff0c;以前在编码的过程中提前找出Bug&#xff0c;需要通过单元测试、CodeReview等各种方式。 当今&#xff0c;人工智能技术的发展给软件开发和测试带来了许多机会。利用人工智能…

聊聊并发编程——多线程之AQS

目录 队列同步器&#xff08;AQS&#xff09; 独占锁示例 AQS之同步队列结构 解析AQS实现 队列同步器&#xff08;AQS&#xff09; 队列同步器AbstractQueuedSynchronizer&#xff08;以下简称同步器&#xff09;&#xff0c;是用来构建锁或者其他同步组 件的基础框架&…

TikTok美国市场爆品:美牙仪一周售出3.36万单,GMV近百万刀

最近一周&#xff0c;超店有数洞察到TikTok Shop美国市场出现一款爆火美牙仪&#xff0c;该款商品售价为31.95美金&#xff0c;佣金比率为25%&#xff0c;一周内销量达3.36万单&#xff0c;GMV近94万美金。自今年7月底上架以来在TikTok上关联视频播放量高达140W&#xff0c;属于…

企业长假期间如何应对突发业务需求?提前部署远程控制为上策

没有人想在长假期间加班&#xff0c;包括管理层也是一样的。但客观来说&#xff0c;很多企业的业务在假期中也是不能中断的&#xff0c;如果业务线遇到紧急需要处理的问题&#xff0c;有没有办法不用长途跋涉跑回公司一趟呢&#xff1f;远程控制现在就是很多企业的选择。 时值…

静态住宅代理是什么?为什么要选择它?

静态住宅代理是互联网服务提供商(ISP)分配的住宅ISP代理。正如名称“静态”所指&#xff0c;他的IP永久不会变化。在当今的数字时代&#xff0c;数据安全、隐私和在线访问已变得至关重要&#xff0c;具有无限带宽的静态住宅代理提供了出色的解决方案。下面给大家具体介绍。 一、…

Django实战项目-学习任务系统-需求说明

一&#xff0c;需求说明   在我最近的阅读中&#xff0c;我深深被一些关于智能或系统的小说吸引。这些小说的主角意外获得某种神秘的智能或系统&#xff0c;然后通过完成系统发布的各种任务&#xff0c;逐渐提升自己的知识和能力。即使是普通的屌丝&#xff0c;也能在系统的管…

win10环境mysql8.10免安装版本配置

MySQL :: Download MySQL Community Server 下载免安装包 解压到相应目录。 以管理员身份启动cmd net start mysql 服务无法启动。 运行mysqld --initialize --console初始化 生成临时密码 验证临时密码并登录测试 mysql -u root -p出错 启动 net start mysql 运行phpmya…

Leetcode684. 冗余连接

Every day a Leetcode 题目来源&#xff1a;684. 冗余连接 解法1&#xff1a;并查集 因为需要判断是否两个节点被重复连通&#xff0c;所以我们可以使用并查集来解决此类问题。 代码&#xff1a; /** lc appleetcode.cn id684 langcpp** [684] 冗余连接*/// lc codestart…

PID温度控制器,全球市场总体规模,前17大厂商排名及市场份额

PID温度控制器全球市场总体规模 PID温度控制器是一种常用的温度控制设备&#xff0c;能够通过使用比例、积分和微分控制算法来实现精确的温度调节。它可以监测和调整温度&#xff0c;保持设定的温度稳定。PID代表比例、积分和微分&#xff0c;比例&#xff08;P&#xff09;控…

【Verilog教程】6.7 Verilog流水线

关键词&#xff1a;流水线&#xff0c;乘法器 硬件描述语言的一个突出优点就是指令执行的并行性。多条语句能够在相同时钟周期内并行处理多个信号数据。 但是当数据串行输入时&#xff0c;指令执行的并行性并不能体现出其优势。而且很多时候有些计算并不能在一个或两个时钟周期…

linux权限机制,

目录 用户与组,id,passwd 查看登录用户whomi,who,w 创建用户 useradd 修改用户信息usermod 删除指定用户userdel 组 ​编辑创建修改删除组groupadd groupmod groupdel 权限 ls-l 修改文件所属用户&#xff0c;所属组 chown,chgrp(change group) 修改权限 chmod 默认权…

针对http接口进行测试,使用Jmeter工具实现

前言&#xff1a; 本文主要针对http接口进行测试&#xff0c;使用Jmeter工具实现。 Jmter工具设计之初是用于做性能测试的&#xff0c;它在实现对各种接口的调用方面已经做的比较成熟&#xff0c;因此&#xff0c;本次直接使用Jmeter工具来完成对Http接口的测试。 一、开发接口…

26381-2011 合成纤维丝织坯绸 阅读笔记

声明 本文是学习GB-T 26381-2011 合成纤维丝织坯绸. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了合成纤维丝织坯绸的术语和定义、要求、试验方法、检验规则、包装和标志。 本标准适用于评定各类合成纤维丝织坯绸品质。 2 规…

需求堆积,如何排序产品优先极

面对堆积的产品需求&#xff0c;到底该如何排序优先极呢&#xff1f; 需求排期的目标 在谈具体的排期方法之前&#xff0c;有必要先探讨一下——合理的需求排期应该达到什么的目标呢&#xff1f;如果站在与项目相关的利益人员的角度来看&#xff0c;至少应该使以下四方面的收…

消化酶在婴幼儿中的重要作用

婴幼儿的健康和发育是每个家庭都格外关心的事情。良好的营养对于婴幼儿的生长和发育至关重要。然而&#xff0c;在婴幼儿的早期生活阶段&#xff0c;由于其胃肠道系统尚未充分发育&#xff0c;他们对于食物的消化和吸收能力有限。在这个过程中&#xff0c;消化酶扮演了至关重要…

C# Task任务详解

文章目录 前言Task返回值无参返回有参返回 async和await返回值await搭配使用Main async改造 Task进阶Task线程取消测试用例超时设置 线程暂停和继续测试用例 多任务等最快多任务全等待 结论 前言 Task是对于Thread的封装&#xff0c;是极其优化的设计&#xff0c;更加方便了我…

张量-数值操作函数

tf.ones(shape,dtype)该函数可以按指定类型与形状生成值为1的张量。 示例代码如下: import tensorflow.compat.v1 as tf tf.disable_v2_behavior()temp tf.ones([2,3],tf.int32)with tf.Session() as sess:print(sess.run(temp)) tf.ones_like(input)该函数可生成和输入张量…

基于SpringBoot+Bootstrap的旅游管理系统的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 登录模块的实现 景点信息管理界面 订票信息管理界面 用户评价管理界面 用户管理界面 景点资讯界面 系统主界面 用户注册界面 景点信息详情界面 订票信息界面 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言…