洛谷 P1141 01迷宫
看似普通的 bfs 题(实际上也不怎么难 主要是我太菜了)
题目链接:https://www.luogu.org/problemnew/show/P1141
如果直接用简单的bfs一顿求的话,会超时(别问我为什么 因为我一开始就是这么写的)
超时的代码就不贴了
所以这里就需要求它的连通块
大体思路是:
先遍历每一个点,如果这个点已经标记了连通块就不管他,如果没有标记的话就进行一次bfs 直到所有的点都标记了自己所在的连通块(这个连通块可能只有一个点)
然后对于输入的每一次查询 直接输出已经标记好的连通块所包含的点数就好了!
这样只需要一次计算,之后都是对标记连通块的数组进行访问 效率大大提升了!
具体实现:
- #include<bits/stdc++.h>
- using namespace std;
- int n,m,a[][]={,,-,,,,,-},flag[][],ans[];
- char maps[][];
- void bfs()
- {
- int d=; //这里一定要从1开始 不能是0!!不然会死循环......
- int i,j;
- for(i=;i<=n;i++)
- for(j=;j<=n;j++)
- {
- if(flag[i][j]==) //如果还没有判断
- {
- flag[i][j]=d; //记录连通块的标号
- int num=;
- queue <int> q; //每次bfs都要开一个新的queue,因为c++的queue没有置空函数
- q.push(i);
- q.push(j);
- while(!q.empty()) //简单的bfs....
- {
- int tx,ty,x,y;
- x=q.front();
- q.pop();
- y=q.front();
- q.pop();
- for(int t=;t<;t++)
- {
- tx=x+a[][t];
- ty=y+a[][t];
- if(maps[tx][ty]!=maps[x][y]&&tx>=&&tx<=n&&ty>=&&ty<=n&&flag[tx][ty]==) //这里一定要写&&flag[tx][ty]==0!!我本来以为不需要,但是仔细想想就知道了....
- {
- flag[tx][ty]=d; //标记成同一个连通块
- num++; //连通块个数+1
- q.push(tx);
- q.push(ty);
- }
- }
- }
- ans[d]=num; //记录当前标号的连通块所包含的点的个数
- d++; //更新标号
- }
- }
- }
- int main()
- {
- int i,j,a,b;
- cin>>n>>m;
- for(i=;i<=n;i++)
- for(j=;j<=n;j++)
- cin>>maps[i][j];
- bfs();
- for(i=;i<m;i++)
- {
- cin>>a>>b;
- cout<<ans[flag[a][b]]<<endl;
- }
- }
这个题耗了我这么久时间 还是我太菜了......快要校赛了 一定要好好学习!!
洛谷 P1141 01迷宫的更多相关文章
- 洛谷——P1141 01迷宫
P1141 01迷宫 题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任 ...
- 洛谷P1141 01迷宫
题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任务是:对于给定的迷宫, ...
- 洛谷P1141 01迷宫【DFS】
有一个仅由数字00与11组成的n \times nn×n格迷宫.若你位于一格0上,那么你可以移动到相邻44格中的某一格11上,同样若你位于一格1上,那么你可以移动到相邻44格中的某一格00上. 你的任 ...
- 洛谷P1141 01迷宫【bfs】
题目链接:https://www.luogu.org/problemnew/show/P1141 题意: 有一个填了0和1的n*n的格子,只能0走到1,1走到0 有m组询问(数据量是1e5),问某一个 ...
- 洛谷 - P1141 - 01迷宫 - dfs
https://www.luogu.org/problemnew/show/P1141 能互相到达的格子的答案自然是一样的,第一次dfs标记联通块,第二次dfs把cnt传递到整个联通卡并顺手消除vis ...
- 洛谷 p1141 01迷宫题解
很长时间没发博客了,今天水一下 很多dalao说染色(普通的)过不了, 我怎么就过了 其实我也是今天才知道什么是染色(由@你听风在吼 dalao指导) 然后自己打了一个,也不知道叫不叫染色,反正是过了 ...
- 洛谷P1238 走迷宫
洛谷1238 走迷宫 题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个 ...
- luogu P1141 01迷宫 x
P1141 01迷宫 题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任 ...
- 01迷宫 洛谷 p1141
题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任务是:对于给定的迷宫, ...
随机推荐
- 16 python 初学(生成器)
列表生成器(列表生成式): 使用此种方式生成的列表会放在内存中占用内存 a = [x*2 for x in range(1, 11)] print(a) # >>> [2, 4, ...
- 手动安装 Eclipse 插件 Viplugin
对 Vimer 来说,切换到 Eclipse 环境,传统的码code方式明显降低效率,Viplugin 是一款类 Vi 模拟器,能实现 Vi 的基本编辑功能. 安装方法 (适用于Windows 和 L ...
- 域名打开没有加上“http://”,导致报错{"code":-32603,"message":"Cannot navigate to invalid URL"}
1.在robotframework中写用例 Open Browser 192.168.4.110:8880/jwzh Chrome 2.没有写http:// 3.导致报错 4.正确写法应该是 Op ...
- leetcode 155. Min Stack 、232. Implement Queue using Stacks 、225. Implement Stack using Queues
155. Min Stack class MinStack { public: /** initialize your data structure here. */ MinStack() { } v ...
- Spring Boot设置上传文件大小
可以使用配置文件配置,也可以使用Bean在启动类中配置 配置文件为application.properties格式: spring.http.multipart.maxFileSize=10Mb sp ...
- Python脱产8期 Day04 2019/4/16
流程控制 1.宏观一定是自上而下(逻辑上方代码一定比逻辑下方代码先执行):顺序结构2.遇到需要条件判断选择不同执行路线的执行方式:分支结构3.有些事情需要重复不断的去执行(当满足某种条件或不满足某种条 ...
- OGC标准服务 WMS WCS WFS WPS
网络覆盖服务 (WCS) 网络要素服务 (WFS) 网络地图服务 (WMS) 网络地图切片服务 (WMTS) 网络处理服务 (WPS) 1.Web 地图服务(WMS)能够根据用户的请求返回相应的地图( ...
- 二:vlan,gre,vxlan
管理网络:包含api网络(public给外部用,admin给管理员用-是内部ip,internal给内部用-是内部ip) 数据网络 存储网络 IDRAC网络 PXE网络 控制节点相关服务 system ...
- java将秒转换为时分秒工具类
需要一个接收时分秒的对象,如下: package com.dq.schoolcontract.utils; import com.sun.media.jfxmedia.control.VideoRen ...
- 教你使用HTML5原生对话框元素,轻松创建模态框组件
HTML 5.2草案加入了新的dialog元素.但是是一种实验技术. 以前,如果我们想要构建任何形式的模式对话框或对话框,我们需要有一个背景,一个关闭按钮,将事件绑定在对话框中的方式安排我们的标记,找 ...