https://www.luogu.org/problem/show?pid=1141

还不太会用 BFS

然后就跟着感觉走了一波

经历了很多错误 刚开始的读入 然后BFS的过程

最后T三个点

看到别人的题解思路 后 自己改了一次

用dp[i][j] 记录 i ,j是在哪个联通快里面的

然后 ans[cnt] 记录 第cnt个联通块的结果

//bfs + 记忆话搜索
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
int n,m;
char mp[][];
int dp[][]; //记录每个点的情况的父亲节点
bool vis[][];
int fx[]={-,,,};
int fy[]={,-,,};
int ans[* +];//存储结果
int cnt = ;
bool check(int x,int y,char k)
{
if(vis[x][y]== && mp[x][y] == k && x>= && x<=n && y<=n && y>= )
{
return ;
}
return ;
}
int bfs(int x,int y)
{
int sum = ;
queue<pii> que;
que.push({x,y});
//cout<< "yes1 "<<endl;
//vis[x][y] = 1;
while (que.size())
{
pii now = que.front(); que.pop();
//cout<< "yes2 "<<endl;
if(vis[now.first][now.second] )
continue;
sum++;
vis[now.first][now.second] = ;
dp[now.first][now.second] = cnt;
char k = (mp[now.first][now.second] == '')?'':'';
for(int i=;i<;i++)
{
//cout<< "yes3 "<<endl;
int dx = now.first +fx[i];
int dy = now.second + fy[i];
//cout << dx <<" "<<dy<<endl;
if(check(dx,dy,k))
{
//sum++;
//cout<< "yes4 "<<endl;
que.push({dx,dy});
}
//vis[dx][dy] = 1;
}
}
//cout<<sum<<endl;
ans[cnt++] = sum;
return sum;
}
int main ()
{
scanf("%d %d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
scanf(" %c", &mp[i][j]);
while (m--)
{
//memset(vis,0,sizeof(vis));
int x,y;
scanf("%d %d",&x,&y);
if( dp[x][y] )
{
cout<< ans[ dp[x][y] ]<<endl;
continue;
}
cout<< bfs(x,y)<<endl;
}
}

luogu P1141 01迷宫的更多相关文章

  1. luogu P1141 01迷宫 x

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

  2. Luogu P1141 01迷宫【搜索/dfs】By cellur925

    题目传送门 我tm到现在还需要刷这种水搜索...我退役吧. 但就是搜索弱嘛 补一补嘛qwq 题目大意:给你一张地图与许多询问,每次询问求这个点所在联通块的点的个数. 所以这个题目的本质就是在求联通块. ...

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

    题目链接 大致题意 相邻格子不同为连通,计算每个点所在的连通块大小. 想法 我采用了并查集的做法. 开一个辅助数组记录连通块大小,每次合并的时候更新父亲节点的大小即可. 一个点先与它上面的点判定,若判 ...

  4. 洛谷——P1141 01迷宫

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

  5. P1141 01迷宫

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

  6. 洛谷P1141 01迷宫

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

  7. 洛谷 P1141 01迷宫

    看似普通的 bfs 题(实际上也不怎么难 主要是我太菜了) 题目链接:https://www.luogu.org/problemnew/show/P1141 如果直接用简单的bfs一顿求的话,会超时( ...

  8. P1141 01迷宫 dfs连通块

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

  9. P1141 01迷宫 DFS (用并查集优化)

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

随机推荐

  1. Hibernate(1)——数据访问层的架构模式<转>

    数据库的概念.逻辑.数据模型概念 应用程序的分层体系结构发展 MVC设计模式与四层结构的对应关系 持久层的设计目标 数据映射器架构模式 JDBC的缺点 Hibernate简介 迅速使用Hibernat ...

  2. poj1568 Find the Winning Move[极大极小搜索+alpha-beta剪枝]

    Find the Winning Move Time Limit: 3000MS   Memory Limit: 32768K Total Submissions: 1286   Accepted:  ...

  3. 正则表达式—RegEx(RegularExpressio)(三)

    今日随笔,继续写一点关于正则表达式的 知识.前两天介绍了正则表达式验证匹配,提取等一些基本的知识,今天继续分享下它的另一个强大的应用:替换(replace). 开始之前,还是要补一下昨天的内容. 在我 ...

  4. Egret5.2.2 微信小游戏行的示例排行榜

    Egret5.2.2版本发布微信小游戏后,在开放数据域有一个默认排行榜.这个文件夹代码+图大小就22kb. 排行榜的效果就是示范用的,很丑...带翻页. 代码如下,基本就是使用canvas渲染了一个排 ...

  5. Egret打包App 修改App名称和图标 (Egret4.1.0)

    图标替换位置在项目res下的drawable这些目录下,用新图标覆盖即可. 这里我用白色图片替换了白鹭默认的图片ic_launcher.png 修改App名字,在res->value->s ...

  6. 并查集hdu4424

    Conquer a New Region Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  7. KMP的next数组性质运用

    hdu2594 Simpsons' Hidden Talents Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  8. vue中封装axios方法

    axios基本配置 使用方法 import axios from 'axios' // 创建axios实例 const service = axios.create({ baseURL: proces ...

  9. jenkins之配置git认证方式

    在使用jenkins构建时候需要从git下拉代码,需要配置认证方式 http拉取代码 配置用户名和密码认证 添加认证 设置用户名和密码 git认证 设置私钥认证

  10. linux IO多路复用POLL机制深入分析

    POLL机制的作用这里就不进行介绍,根据linux man手册,解释为在一个文件描述符上等待某个事件.按照抽象一点的理解,当某个事件被触发(条件被满足),文件描述符变为有状态,那么用户空间可以根据此进 ...