P1141 01迷宫(BFS+简单连通块优化解析)

01迷宫

题目描述

有一个仅由数字 0 0 0 1 1 1 组成的 n × n n \times n n×n 格迷宫。若你位于一格 0 0 0 上,那么你可以移动到相邻 4 4 4 格中的某一格 1 1 1 上,同样若你位于一格 1 1 1 上,那么你可以移动到相邻 4 4 4 格中的某一格 0 0 0 上。

你的任务是:对于给定的迷宫,询问从某一格开始能移动到多少个格子(包含自身)。

输入格式

第一行为两个正整数 n , m n,m n,m

下面 n n n 行,每行 n n n 个字符,字符只可能是 0 0 0 或者 1 1 1,字符之间没有空格。

接下来 m m m 行,每行两个用空格分隔的正整数 i , j i,j i,j,对应了迷宫中第 i i i 行第 j j j 列的一个格子,询问从这一格开始能移动到多少格。

输出格式

m m m 行,对于每个询问输出相应答案。

样例 #1

样例输入 #1

2 2
01
10
1 1
2 2

样例输出 #1

4
4

提示

对于样例,所有格子互相可达。

  • 对于 20 % 20\% 20% 的数据, n ≤ 10 n \leq 10 n10
  • 对于 40 % 40\% 40% 的数据, n ≤ 50 n \leq 50 n50
  • 对于 50 % 50\% 50% 的数据, m ≤ 5 m \leq 5 m5
  • 对于 60 % 60\% 60% 的数据, n , m ≤ 100 n,m \leq 100 n,m100
  • 对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 1000 1\le n \leq 1000 1n1000 1 ≤ m ≤ 100000 1\le m \leq 100000 1m100000

思路分析:
这个题看一下就知道要用dfs或者bfs,但是直接爆搜的话会肯定会超时最后只能过70分,所以我们要想一个方法来优化,首先这个题是需要记录每一个开始走可以走到的最大的步骤,设想一下啊,如果有一条这样的路径存在:a–>b–>c–>d,那么无论a还是b还是c还是d,他们可以走到的最远的路径都是这个4,所以我们不必要每一个点都开始搜,只要在满足的一条路上全都标记一下,类似于并查集,但是这里根本不用那么麻烦,直接用一个数组来标记即可,直接上代码,代码有详解

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#define x first
#define y second
const int N = 1010;
using namespace std;
typedef pair<int, int>PII;
int n, m,a,b;
char g[N][N];
bool st[N][N];
int vis[N][N];//记录联通区间
int dx[] = { 1,0,-1,0 };
int dy[] = { 0,1,0,-1 };//方向
int res,k=1;
int ans[20000005];//存档答案
queue<PII>q;
void bfs(int a,int b)
{q.push({ a,b });while (q.size()){auto t = q.front();q.pop();for (int i = 0; i < 4; i++){int xx = t.x+ dx[i];int yy = t.y + dy[i];if (xx >= 1 && yy >= 1 && xx <= n && yy <= n && g[t.x][t.y] != g[xx][yy] && !vis[xx][yy])//判断合法{vis[xx][yy] = k;//起到标记作用q.push({ xx,yy });res++;//答案数加一}}}
}
int main()
{cin >> n >> m;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)cin >> g[i][j];for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++) {if (!vis[i][j])//没搜过就开搜{res = 1;//重置点数为1,因为包含这个点本身vis[i][j] = k;//标记bfs(i, j);ans[k] =res;k++;}}while (m--){cin >> a >> b;cout << ans[vis[a][b]] << endl;}  return 0;
}

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

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

相关文章

python 背包问题 动态规划

问题分析子问题界定&#xff1a;由参数 k 和 y 界定k&#xff1a;考虑对物品1, 2, … , k 的选择 y&#xff1a;背包总重量不超过 y 原始输入&#xff1a;k n, y b 子问题计算顺序&#xff1a; k 1, 2, … , n 对于给定的 k&#xff0c;y 1, 2, … , b 定义问题 假设有 n 个…

任务修复实例(4)

Quest Name War Dance | 战争之舞 Quest ID 24540 -- Add Creature INSERT INTO world.creature (guid, id, map, zoneId, areaId, spawnDifficulties, phaseUseFlags, PhaseId, PhaseGroup, terrainSwapMap, modelid, equipment_id, position_x, position_y, position_z, o…

【Spring】IOC/DI中常用的注解@Order与@DependsOn

目录 1、Order 注解改变Bean自动注入的顺序 1.1、了解SpringBootTest注解 1.2、Order 注解改变Bean自动注入的顺序 2、DependsOn 改变Bean的创建顺序 1、Order 注解改变Bean自动注入的顺序 在sping中&#xff0c;通过IOC&#xff08;控制反转&#xff09;和DI&#xff08;依…

文本向量化模型新突破——acge_text_embedding勇夺C-MTEB榜首

在人工智能的浪潮中&#xff0c;以GPT4、Claude3、Llama 3等大型语言模型&#xff08;LLM&#xff09;无疑是最引人注目的潮头。这些模型通过在海量数据上的预训练&#xff0c;学习到了丰富的语言知识和模式&#xff0c;展现了出惊人的能力。在支撑这些大型语言模型应用落地方面…

hbase建表时设置预分区

一.hbase rowkey设计的原则 遵循唯一性,散列,不应过长等原则 二.rowkey常用的设计 1.reverse反转 2.salt加盐 3.hash散列 三.hbase建表预分区,指定3个rowkey,分成4个region 在Hbase中,预分区是一种优化手段,用于在创建表时提前规划好Region的分布,以提高数据写入的效率和查询…

【ARMv9 DSU-120 系列 -- CHI Interface】

文章目录 DSU-120 CHI BUSAddress Target Groups配置步骤映射和管理Hashing for CHI transaction distribution散列过程和地址目标组识别散列函数定义两个地址目标组的散列四个地址目标组的散列八个地址目标组的散列DSU-120 CHI BUS DSU-120(DynamIQ™共享单元-120)在构建时…

文件操作(1)

为什么使⽤⽂件&#xff1f; 如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运⾏程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进⾏持久化的…

各平台奇怪问题备忘录

微信小程序 小程序报错Page 页面路径 has not been register yet 描述&#xff1a;uniapp做微信小程序开发时&#xff0c;新增某页面后&#xff0c;小程序跳转该页面报错Page 页面路径 has not been register yet 已知&#xff1a;page.json已添加该页面&#xff0c;小程序a…

实验二:Huggingface数据集页面遍历爬取

准备&#xff1a; 获取所有的标签和链接&#xff0c;并存储在json文件中 main.py from bs4 import BeautifulSoup import requests import extract import Into_Tag import read import json def get_info(filepath):try:with open(filepath,r,encodingutf-8)as file:conten…

B端设计实战:基于角色属性的权限设计

编辑导读:“权限控制”是中后台的基础能力,用于管控操作人员在平台内可做的事项内容。即通过权限控制,可以决定哪些人在平台内可以做哪些事。本文作者围绕角色&属性的权限设计展开分析,希望对你有帮助。 Hello,我是一名交互设计师。 随着3月暖春的即将到来,苏州的疫…

Java设计模式中策略模式

策略模式是一种行为型设计模式&#xff0c;它允许在运行时选择算法的行为。这种模式定义了一系列算法&#xff0c;并使这些算法可以相互替换&#xff0c;使得算法的变化独立于使用算法的客户。 以下是策略模式的一般结构&#xff1a; Context&#xff08;上下文&#xff09;&a…

bugku-杂项-社工进阶收集

下载附件 得到图片 利用百度地图查找 这里得到地点名称大雁塔音乐喷泉 陕西省西安市&#xff0c;大雁塔北广场 打开高德地图 来到大雁塔北广场 因为在北广场&#xff0c;所以地铁站为大雁塔站 开始分析 坐七站到大雁塔站&#xff0c;即始发站为韦曲南站 因为始发站离她家800米&…

高频前端面试题汇总之HTML篇

1. src和href的区别 src和href都是用来引用外部的资源&#xff0c;它们的区别如下&#xff1a; src&#xff1a; 表示对资源的引用&#xff0c;它指向的内容会嵌入到当前标签所在的位置。src会将其指向的资源下载并应⽤到⽂档内&#xff0c;如请求js脚本。当浏览器解析到该元素…

34. BI - 美国大学生足球队的 GCN 案例

本文为 「茶桁的 AI 秘籍 - BI 篇 第 34 篇」 文章目录 美国大学生足球队 Embedding&#xff08;GCN&#xff09; Hi&#xff0c;你好。我是茶桁。 在上一节课中&#xff0c;因为需要&#xff0c;我们先是回顾了一下 Graph Embedding&#xff0c;然后跟大家讲解了 GCN 以及其算…

linux驱动-CCF-0基础

1. 时钟设备 晶振&#xff1a;提供基础时钟源的&#xff08;可分为有源晶振、无源晶振两种&#xff09;&#xff1b; PLL: 用于倍频的锁相环&#xff1b; mux: 用于多路时钟源选择&#xff1b; Divider: 用于分频的&#xff1b; gate: 用于时钟使能的与门电路等 2. CCF…

Python读写文本URL蓝牙WIFI自动连接电子名片位置坐标智能海报等NDEF标签

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?id615391857885&spma1z10.5-c.w4002-21818769070.11.60ad789erlonvk 近场通信&#xff08;Near Field Communication&#xff0c;简称NFC&#xff09;&#xff0c;是一种新兴的技术&…

Python常见运算符

赋值运算符 赋值运算符主要用来对变量进行赋值,包括如下这些: 运算符 描述 赋值加等于 - 减等于 * 乘等于 / 除等于 // 整除等于 % 模等于 ** 幂等于实例如下: a 10 a 5 # 等价于 a a5 a *2 # 等价于 a a*2比较运算符 比较运算符主要用来比较两个数据的大小,包括如下这…

技术速递|Java on Azure Tooling 3月更新 - Java on Azure 开发工具未来六个月路线图发布

作者&#xff1a;Jialuo Gan - Program Manager, Developer Division At Microsoft 排版&#xff1a;Alan Wang 大家好&#xff0c;欢迎阅读 Java on Azure 工具的三月更新。在本次更新中&#xff0c;我们将分享未来几个月对 Java on Azure 开发工具的投资。此外&#xff0c;我…

ubuntu系统解决安装datahub时报错failed to register layer: error creating overlay mount

查了很多说禁用selinx和不使用overlay 以及删除overlay2文件夹的方法都没用 再次拉取的时候还是会报这个错误 编辑 Docker 配置文件&#xff1a; 打开 Docker 的配置文件&#xff0c;通常位于 /etc/docker/daemon.json。如果文件不存在&#xff0c;则可以创建一个新文件。…

Redis入门到通关之数据结构解析-Dict

文章目录 概述构成Dict的扩容Dict的rehash总结 欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1的延伸的后端开…