看似普通的 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迷宫的更多相关文章

  1. 洛谷——P1141 01迷宫

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

  2. 洛谷P1141 01迷宫

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

  3. 洛谷P1141 01迷宫【DFS】

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

  4. 洛谷P1141 01迷宫【bfs】

    题目链接:https://www.luogu.org/problemnew/show/P1141 题意: 有一个填了0和1的n*n的格子,只能0走到1,1走到0 有m组询问(数据量是1e5),问某一个 ...

  5. 洛谷 - P1141 - 01迷宫 - dfs

    https://www.luogu.org/problemnew/show/P1141 能互相到达的格子的答案自然是一样的,第一次dfs标记联通块,第二次dfs把cnt传递到整个联通卡并顺手消除vis ...

  6. 洛谷 p1141 01迷宫题解

    很长时间没发博客了,今天水一下 很多dalao说染色(普通的)过不了, 我怎么就过了 其实我也是今天才知道什么是染色(由@你听风在吼 dalao指导) 然后自己打了一个,也不知道叫不叫染色,反正是过了 ...

  7. 洛谷P1238 走迷宫

    洛谷1238 走迷宫 题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个 ...

  8. luogu P1141 01迷宫 x

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

  9. 01迷宫 洛谷 p1141

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

随机推荐

  1. (四)surging 微服务框架使用系列之网关 转载

    一.什么是API网关 API网关是一个服务器,是系统对外的唯一入口.API网关封装了系统内部架构,为每个客户端提供一个定制的API.API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入 ...

  2. scrapy 爬取糗事百科

    安装scrapy conda install scrapy 创建scrapy项目 scrapy startproject qiubai 启动pycharm,发现新增加了qiubai这个目录 在spid ...

  3. React-菜鸟学习笔记(二)

    这篇新颖的东西是React的组件的封装和引用 <!DOCTYPE html> <html> <head> <meta charset="UTF-8& ...

  4. C#中存储数据的集合:数组、集合、泛型、字典

    为什么把这4个东西放在一起来说,因为c#中的这4个对象都是用来存储数据的集合……. 首先咱们把这4个对象都声明并实例化一下: //数组 ]; //集合 ArrayList m_AList = new ...

  5. 抓包工具Charles的使用心得

    简介 Charles其实是一款代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果达到分析抓包的目的.该软件是用Java写的,能够在Windows,Mac,Linux上使用.开发iOS都在 ...

  6. H5 58-网页的布局方式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. (第十三周)评论Final发布II

    按课上展示的顺序对每组进行点评:(性能.功能.UI.部署) 1.  Nice! 项目:约跑软件 软件操作的响应很快,俩人进行聊天时可以实现消息的及时传递.功能主要有:注册账号.登录.创建/删除跑步计划 ...

  8. iOS NSDictionary JSON 相互转换

    /*! * @brief 把格式化的JSON格式的字符串转换成字典 * @param jsonString JSON格式的字符串 * @return 返回字典 */ + (NSDictionary * ...

  9. React Native之倒计时组件的实现(ios android)

    React Native之倒计时组件的实现(ios android) 一,需求分析 1,app需实现类似于淘宝的活动倒计时,并在倒计时结束时,活动也结束. 2,实现订单倒计时,并在倒计时结束时,订单关 ...

  10. package-lock.json和package.json的作用

    转自:https://www.cnblogs.com/cangqinglang/p/8336754.html package-lock.json的作用就是锁定安装依赖时包的版本,并且需要上传到git, ...