洛谷P1141 01迷宫

洛谷p1141 01迷宫 洛谷p1141 01迷宫 这道题提交了好多遍终于A了,bfs和dfs都提交好几遍都过不了(各种细节和输入的问题),必须单独开一篇博客来叨叨。 首先这道题的搜索并不难,但是要注意细节,他问的是能到达的格子(包括自身),一开始我以为包括自身是走了一圈回来再到达所以我vis一开始没有赋值而且ans是赋值为0,其实是站在那里就算是一个了,所以开始bfs之vis[x][y]要赋值为true(即已访问),然... 阅读详情

我们可以使用dfs,走格查找 

#include <bits/stdc++.h>

using namespace std;

int n, m, x, y, ct;
char c;
int a[1009][1009];
int vis[1009][1009];
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};

void f (int x, int y) {
	vis[x][y] = false;
	int nx, ny;
	for (int i = 0; i < 4; i++) {
		nx = dx[i] + x;
		ny = dy[i] + y;
		if (nx < 1 || nx > n || ny < 1 || ny > n || a[nx][ny] == a[x][y] || !(vis[nx][ny])) continue;
		ct++;
		f (nx, ny);
		vis[nx][ny] = false;
	}
	return;
}

int main () {
	
	cin >> n >> m;
	
	for (int i = 1; i <= n; i++)
		for (int k = 1; k <= n; k++) {
			cin >> c;
			a[i][k] = c - '0';
		}
	
	for (int i = 1; i <= m; i++) {
		memset (vis, true, sizeof (vis));
		cin >> x >> y;
		vis[x][y] = false;
		ct = 1;
		f (x, y);
		cout << ct << endl;
	}
	
	return 0;
}

结果发现60分,TLE

因为dfs需要递归,

太慢了

所以使用bfs

bfs使用queue代替了慢慢的递归

#include <bits/stdc++.h>

using namespace std;

char c;
int n, m, nextColor;
int a[1009][1009], vis[1009][1009], colorCount[1000009];
const int dx[4] = {0, 1, 0, -1};
const int dy[4] = {1, 0, -1, 0};

int bfs (int x, int y) {
	if (vis[x][y] != -1)
		return colorCount[vis[x][y]];
	int cnt = 1;
	queue<int> q;
	vis[x][y] = nextColor; q.push(x); q.push(y);
	while (!q.empty()) {
		x = q.front(); q.pop(); y = q.front(); q.pop();
		for (int i = 0; i < 4; i++) {
			int nx = x + dx[i], ny = y + dy[i];
			if (nx < 1 || nx > n || ny < 1 || ny > n) continue;
			if (vis[nx][ny] == -1 && a[nx][ny] != a[x][y]) {
				vis[nx][ny] = nextColor; cnt++;
				q.push(nx); q.push(ny);
			}
		}
	}
	colorCount[nextColor] = cnt; nextColor++;
	return cnt;
}

int main () {
	
	cin >> n >> m;
	
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= n; j++) {
			cin >> c;
			a[i][j] = c - '0';
		}
	
	nextColor = 0;
	memset (vis, -1, sizeof(vis));
	
	while (m--) {
		int x, y; cin >> x >> y;
		cout << bfs(x, y) << endl;
	}
	
	return 0;
}
洛谷 P1141 01迷宫 100分 若你位于一格00上,那么你可以移动到相邻44格中的某一格11上,同样若你位于一格11上,那么你可以移动到相邻44格中的某一格00上。接下来mm行,每行22个用空格分隔的正整数i,ji,j,对应了迷宫中第ii行第jj列的一个格子,询问从这一格开始能移动到多少格。对于100\%100%的数据,n≤1000,m≤100000n≤1000,m≤100000。对于60\%60%的数据,n≤100,m≤100n≤100,m≤100;对于40\%40%的数据,n≤50n≤50;对于50\%50%的数据,m≤5m≤5; 阅读详情

相关推荐

洛谷 P1141 01迷宫BFS题解

题目描述 有一个仅由数字0与1组成的n×n格迷宫。若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上。 你的任务是:对于给定的迷宫,询问从某一格开始能移动到多少个格子(包含自身)。 输入格式 第1行为两个正整数n,m。 下面n行,每行n个字符,字符只可能是0或者1,字符之间没有空格。 接下来m行,每行2个用空格分隔的正整数i,j,...

qq_32450293的博客 561

01迷宫(洛谷 P1141)

这是洛谷上一道BFS的题,但直接暴力会TL,因为数据范围太大了,需要一些小思维优化一下,我这里选择的是用连通块优化,这道题BFS连通块就能AC了。这道题也没什么可说的,还是那句话,在写题之前,一定要先看清数据范围,计算时间复杂度,选择方法……另外就是一定要掌握连通块这种方法,在优化处理BFS和DFSTL的时候会经常用到。

2402_86265887的博客 1485

基于 YOLO + SAM 的自动图像标注实战

摘要: 本文提出一种基于YOLO检测和SAM分割的自动化数据标注流水线方案,通过YOLO定位目标并生成检测框,再以检测框为提示驱动SAM完成精细分割,最终输出YOLO格式的标注文件。该方案将人工标注升级为半自动流程,显著提升标注效率,尤其适用于多类别、大规模图像的实例级标注需求。代码模块化设计支持模型灵活替换,并集成异常处理与进度可视化功能。虽依赖YOLO检测质量且对小目标存在局限,但作为工程落地方案,可有效降低私有数据集构建成本,适用于工业检测、遥感等场景的冷启动标注。

qq_64366203的博客 1149

01迷宫_洛谷_p1141

涉及知识:BFS、连通性。

2302_80199617的博客 849

Android 15网络子系统深度解析(一):ConnectivityService与网络管理框架全解析

深入剖析Android 15核心网络服务ConnectivityService的架构设计、NetworkAgent/Factory机制、网络状态管理、以及WiFi/移动网络切换的完整流程

Cheson的专栏 1749

200smart 模拟量转换库的建立

模拟量当前值 =(工程值 - 工程量下限)*(模拟量上限 - 模拟量下限)/ (工程量上限 - 工程量下限)+ 模拟量下限2. 建立变量表3. 程序。

mmxxoo_xxmmp的博客 4219

[洛谷Luogu]P1141 01迷宫[联通块 并查集]

题目链接 大致题意 相邻格子不同为连通,计算每个点所在的连通块大小。 想法 我采用了并查集的做法。 开一个辅助数组记录连通块大小,每次合并的时候更新父亲节点的大小即可。 一个点先与它上面的点判定,若判定连通则加入上方点所属的块中。 再与左边的点判定,若连通则再将两个块合并。 总体复杂度O(n3)O(n^3)O(n3),其中并查集不加优化复杂度为O(n)O(n)O(n),使用路径压缩+按节点大小...

The Clouder's 405

PCL 平面点云的凹多边形边界提取【2025最新版】

平面点云的凹多边形边界提取及边界轮廓线绘制。博客长期更新,本文最近更新时间为:2025年1月6日。

点云侠的博客 7184

P1141 01迷宫 【洛谷算法习题】

这是一道关于01迷宫连通性问题的算法题解。题目要求在n×n的01矩阵中,从指定位置出发,按照"0只能走到相邻1,1只能走到相邻0"的规则,计算可达的格子数量。 关键解题思路: 使用广度优先搜索(BFS)预处理整个迷宫,将互相连通的区域标记为同一编号 统计每个连通区域的格子数量 对于每个查询,直接返回对应连通区域的格子数 算法优势: 预处理时间复杂度O(n²) 查询响应时间O(1) 完美处理大规模数据(n≤1000,m≤100000) 代码实现要点: 定义方向数组处理四个相邻位置 使用队列

Pretty Boy Fox的博客 636

库存管理系统项目部署方案(基于jdk17)

不需要安装到服务器,运维本地安装就行,主要是用来编译前端代码的。构建完成后将dist文件夹复制到服务器内。

程序员诚哥 6384

NVIDIA Isaac Lab 入门教程(一)

Isaac Lab 是一个用于机器人学习的统一模块化框架,旨在简化机器人研究中的常见工作流程(如 RL、从演示中学习和运动规划)。它建立在英伟达 Isaac Sim 的基础上,利用最新的仿真功能实现逼真的场景和快速高效的仿真。该框架的核心目标是Isaac Lab 的主要功能包括:由 PhysX 提供的快速准确的物理模拟、用于矢量化渲染的平铺渲染 API、用于提高鲁棒性和适应性的域随机化,以及对在云中运行的支持。有关该框架的更多信息,请参阅论文[MYY+23]。

机器人控制与仿真应用 8218

洛谷 P1141 01迷宫 (dfs)

题目链接:https://www.luogu.org/problemnew/show/P1141 题意:给一个n*n的仅由01 构成的迷宫,输出从某一点出发所能走到的最多格子,如果所处方块是0,则可以走到四个方向上的1去,反之亦然。 思路: 1.如果这一格的步数已经大于0就直接输出,否则dfs,并标记,具体的看代码。 2.另外所谓的走格子规则,其实就是周围四个方向的格子跟所在的格子不等就行...

elorole的博客 1007

电商数据采集实战——多平台价格监控、比价分析与智能告警系统

在电商竞争日益激烈的今天,价格监控与比价分析已成为品牌商、渠道商和消费者的核心需求。对于品牌商而言,需要监控各渠道售价是否低于指导价(破价监控);对于消费者而言,希望在最佳时机以最低价购入心仪商品;对于数据分析师而言,价格波动数据是洞察市场趋势的金矿。然而,电商数据采集面临三大核心挑战:本文将基于 Python + Scrapy + Playwright + Redis + ClickHouse 技术栈,构建一套完整的电商价格监控与比价系统。架构分层说明:电商平台的反爬手段层出不穷,采集系统必须具备多层次的

从事移动开发八年,csdn博客专家,阿里云特邀专家,华为云云享专家,高级网络信息安全工程师,大数据工程师(高级),python技术开发(高级),HarmonyOS 应用开发者高级认证,现在某学校任教。 136

洛谷—P1141 01迷宫(查找连通块、记忆化搜索)

#include<iostream> #include<queue> #include<vector> using namespace std; struct pos { int x, y; pos(int x, int y) { this->x = x; this->y = y; } }; char map[1010][1010]...

weixin_43784305的博客 231

GPU硬件架构与微架构深度解析09-GPU寄存器文件深度解析

本文探讨GPU架构中大规模寄存器堆的设计与高效分配算法。寄存器文件作为GPU关键组件,支持大规模线程并行和快速数据存取。文章分析了多体寄存器堆的设计考量,包括端口数量、冲突避免和功耗管理,并比较了线性扫描、图着色等寄存器分配算法的特点。还介绍了寄存器压缩、动态分区等高级优化技术,以及NVIDIA Ampere架构的实际案例。这些技术对提升GPU计算性能和能效至关重要。

2301_79143213的博客 121

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【洛谷】P1141-01迷宫

可以用bfs解决。考虑最耗时情况,bfs m次全图,时间应该是不够的。所以不如求出连通区域。以数组v作为与迷宫pos一一对应的连通表,再通过bfs时队列的特性:每次队列空时为一个连通区域,以此为界限,在循环外使sign逐渐递增,以达到每个连通区域的标记值都不同的效果。输入的迷宫标记内容每次遇到可标记的点都统计进入sum(目前连通区域的格子数),以哈希表形式存入答案数组ans,以降低查询时的复杂度。询问时得到对应坐标上的标记值,即可哈希打表直接得到答案。

weixin_60344133的博客 424

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

[洛谷] P1141 01迷宫

bfs 、 dfs 、染色~

陕西师范大学 人工智能 周一卓 的博客 1347

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【洛谷P1141】 01迷宫

回头看到m的数据量就知道了:每次查询都宽搜一次,肯定会超时。让我们重新看回题目:一个格子可以移动到的格子是固定的 , 相互移动的格子形成一片连通的区域,也就是说,无论你从哪个格子出发,都可以到达这片连通区域的任何一个格子。因此,我们只需要提前将连通的区域找到,并且计算该区域的格子数。之后每一次查询就可以直接得出结果。

Ivy_qyqykawaii的博客 886

洛谷 P1141 01迷宫 bfs优化

洛谷 P1141 01迷宫 bfs优化 题解: 这道题的n值较小,但需要查询的m值较大,每次都进行一次bfs显然是会超时的。所以我们需要进行优化。 对于一次bfs,我们可以得到一个连通块,而这个连通块内的所有点的值(这是值就是最多能移动多少格)是相同的,所以我们可以在一次bfs中得到这些点的值,下次就不用再进行bfs了。 我们可以使用一个visit[max][max]数组,然后全部初始化为-1,说...

化身孤岛的鲸o的博客 635

洛谷 P1141 01迷宫

尝试从每个顶点出发进行搜索(可以使用深搜获广搜),搜索一个格子周围的满足:在地图内,未访问过,与当前格子的数值不同的格子。一趟搜索标记的格子属于一个连通块(无向图连通分量)。每个格子是一个元素,每个连通块(连通分量)是一个集合。使用并查集合并相邻的数值不同的格子,同时统计每个格子中元素数量。如果网格有n列,则从1开始的坐标(x, y)可转为(x-1)*n+y。在询问某位置时,输出该位置所属的连通块的格子数量。查询某格子时,输出该格子所在集合的元素数量。统计每个连通块中格子数量。

君义NOIP的博客 1171

01迷宫【洛谷P1141】

题目描述 有一个仅由数字 0 与 1 组成的 n × n 格迷宫。若你位于一格 0 上,那么你可以移动到相邻 4 格中的某一格 1 上,同样若你位于一格 1 上,那么你可以移动到相邻 4 格中的某一格 0 上。 你的任务是:对于给定的迷宫,询问从某一格开始能移动到多少个格子(包含自身)。 输入 输入的第 1 行为两个正整数 n,m (n ≤ 1000,m ≤ 100000) 下面 n 行,每行 n...

ESTHERWXY的博客 395

洛谷 P1141 01迷宫题解

洛谷P1141 01迷宫题解 题目链接 https://www.luogu.com.cn/problem/P1141 此题的最大难点是什么 显然是数据过大TLE 首先此题bfs与dfs都可,下面介绍bfs。 仔细观察题目会发现其实可以把这张图想象成若干个分开的连通图,每一个 连通图显然所能移动到的格子都是相同的,这样就没有必要询问一次bfs一次。 直接预处理一次访问整个图即可,那么下面的难点便是...

hunxuewangzi的博客 403
上一篇: 【五一创作】c++七种常用数据结构
下一篇: 洛谷P5733 【深基6.例1】自动修正
Runcode8
博客等级 码龄4年 180粉丝 56原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值