题目链接:https://www.luogu.org/problemnew/show/P1141

题意:

有一个填了0和1的n*n的格子,只能0走到1,1走到0

有m组询问(数据量是1e5),问某一个格子可以到达的格子数。

思路:

刚开始一直在想记忆化搜索。某一个格子走过了之后的格子数记下来,之后访问到的时候加上。

但是这样会重复的。比如(x,y)走到(i,j),他们能走到的格子是有交集的,并不是包含的关系。

应该要想到 连通块。

给定的这个图形成了若干的连通块。我们只需要预处理一下这些连通块,对于每次询问查询他对应的连通块的大小就行了。

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<map>
 4 #include<set>
 5 #include<iostream>
 6 #include<cstring>
 7 #include<algorithm>
 8 #include<vector>
 9 #include<queue>
10
11 using namespace std;
12 typedef pair<int, int> pr;
13
14 int n, m;
15 int mat[1005][1005];
16 int dx[4] = {1, -1, 0, 0};
17 int dy[4] = {0, 0, 1, -1};
18
19 int id[1005][1005];
20 int cnt[1000005];
21
22 bool check(pr p)
23 {
24     int i = p.first, j = p.second;
25     return (i > 0 && i <= n && j > 0 && j <= n);
26 }
27
28 void bfs(int i, int j, int k)
29 {
30     int c = 1;
31     queue<pr>que;
32     pr st = make_pair(i, j);
33     que.push(st);
34     id[i][j] = k;
35     while(!que.empty()){
36         pr now = que.front();que.pop();
37         for(int i = 0; i < 4; i++){
38             pr tmp = make_pair(now.first + dx[i], now.second + dy[i]);
39             if(check(tmp) && !id[tmp.first][tmp.second] && mat[tmp.first][tmp.second] ^ mat[now.first][now.second]){
40                 id[tmp.first][tmp.second] = k;
41                 que.push(tmp);
42                 c++;
43             }
44         }
45     }
46     cnt[k] = c;
47 }
48
49 int main()
50 {
51     scanf("%d%d", &n, &m);
52     for(int i = 1; i <= n; i++){
53         char s[1005];
54         scanf("%s", s);
55         for(int j = 1; j <= n; j++){
56             mat[i][j] = s[j - 1] - '0';
57         }
58     }
59     int now_id = 1;
60     for(int i = 1; i <= n; i++){
61         for(int j = 1; j <= n; j++){
62             if(!id[i][j]){
63                 bfs(i, j, now_id);
64                 now_id++;
65             }
66         }
67     }
68
69     for(int i = 0; i < m; i++){
70         int x, y;
71         scanf("%d%d", &x, &y);
72         printf("%d\n", cnt[id[x][y]]);
73     }
74
75     return 0;
76 }

转载于:https://www.cnblogs.com/wyboooo/p/10354934.html

洛谷P1141 01迷宫【bfs】相关推荐

  1. 洛谷P1141 01迷宫【记忆化搜索】

    题目链接:P1141 01迷宫 程序说明: 可以用bfs来做,但是数据毒瘤,如果每次询问都运行一次bfs,会有三个TLE..可以将路途经过的点储存起来并且记录答案,如果询问的点已经被记录了答案,直接输 ...

  2. 洛谷P1141 01迷宫

    因为各种乱七八糟的原因,学搜索实在是学了太久了也咕了好久博客啊.准备再做一遍之前写过的题顺便补一下博客qwq 01迷宫 [题目链接](https://www.luogu.org/problemnew/ ...

  3. 洛谷 P1141 01迷宫(dfs)

    https://www.luogu.org/problem/P1141 思路:找到每一个连通块,不同连通块的标记不同,给标记赋值成该连通块的数量 1 // luogu-judger-enable-o2 ...

  4. P1141 01迷宫(BFS+记忆化)

    https://www.luogu.org/problemnew/show/P1141 题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样 ...

  5. 洛谷 P1238 走迷宫【搜索】【DFS】

    洛谷 P1238 走迷宫 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 洛谷 P1238 走迷宫 二.题目分析 (一)算法标签 搜索 DFS ( ...

  6. bfs:01迷宫(洛谷P1141)

    洛谷传送门 解析 乍一看:bfs板子题 冰法师最棒了 然鹅 看了一眼数据范围 心中已有画面 <面 堂 发 黑> 怎么办嘞? 我们想到: 因为该题来与去的可逆性 我们搜一次后,这些点以后都不 ...

  7. 洛谷P1363 幻象迷宫(DFS)

    输入样例#1: 5 4 ##.# ##S# #-# #.## #-# 5 4 ##.# ##S# #-# -#. #.## 输出样例#1: Yes No 大概就是说给出一个01迷宫类的地图,按照这个地 ...

  8. 2019.03.04【ZJOI2018】【BZOJ5213】【洛谷P4339】迷宫(自动机)(数论)

    BZOJ传送门 洛谷传送门 解析: 这道题本质其实是要最小化一个能够接受所有mmm进制下KKK的倍数的自动机. 显然我们有一个方案就是KKK个节点,iii的第jjj条边向(i∗m+j)%K(i*m+j ...

  9. 01迷宫(洛谷-P1141)

    题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任务是:对于给定的迷宫, ...

  10. 洛谷oj P2802 回家(BFS)

    题目链接 简单说下题意,就是给一个迷宫.一开始有6滴血,走一步掉一滴.路上有补血包,问能不能在血量>=1的情况下到达终点. 这题其实就是HDU上面的1072.个人做题习惯搜索题最短路一般用BFS ...

最新文章

  1. Eclipse详细设置护眼背景色和字体颜色并导出
  2. Java并行有优势吗_Java中不同的并发实现的性能比较
  3. CPU上下文切换(系统调用、进程上下文、线程上下文、中断上下文)
  4. 纪念品分组java_纪念品分组 ——易懂、简介、技巧(Java代码)
  5. java invocationtarget,Java异常处理之java.lang.reflect.InvocationTargetException
  6. iBATIS In Action:iBATIS的安装和配置
  7. Linux基础-网络配置
  8. 微信小程序的剪贴板 +复制剪贴,在淘宝中打开就可以获取到商品
  9. session同步问题
  10. Python Apex 武器自动识别与压枪 全过程记录
  11. 玩转BIOS与注册表
  12. js逆向——百度翻译
  13. 继电反馈法自整定_PID控制及整定算法
  14. 民营企业该如何留住人才
  15. 2012年8月22日
  16. 网站入侵工具之wscan使用详解
  17. Logisitc Regression 预测员工离职率
  18. Wos/Pubmed/Scopus数据库一键去重+清洗数据 CiteSpace Vosviewer
  19. explore_UserGuide
  20. Tomcat基本使用以及项目部署。

热门文章

  1. bci测试如何整改_电源动态响应测试,什么样的波形算合格?
  2. python对数组的操作_Python Numpy库对数组的操作详解,
  3. svn服务器搭建和使用_使用Gitea搭建自己的Git服务器
  4. 文本文件与二进制的区别
  5. react如何写ajax,请问如何在React中做Ajax 请求?
  6. 进位位判别法_''进位-判断-执行''的通用思想
  7. 多人麻将源码 html5,新版大众麻将 H5版
  8. 【hdu1018】Big Number(求n!的位数----斯大林公式/log函数)
  9. 如不指定存储类型c语言,总结C语言的五种存储类型
  10. Operation和OperationQueue实战:异步下载图片并给图片加滤镜