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. HTTP/2探索第一篇——概念

    版权声明:本文由张浩然原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/87 来源:腾云阁 https://www.qclou ...

  2. 配置maven使用nexus

    本文简单介绍使用配置maven使用nexus仓库,在团队中使用nexus,避免每个人都从中央仓库去下载依赖,节省带宽,提高下载速度,同时也减少了中央仓库的压力 配置在maven中使用nexus很简单( ...

  3. 【BZOJ2768】[JLOI2010]冠军调查/【BZOJ1934】[Shoi2007]Vote 善意的投票 最小割

    [BZOJ2768][JLOI2010]冠军调查 Description 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教 ...

  4. SSH电力项目四-显示首页

    1.登录页面: 将上一节中的页面放到/WEB-INF/page/目录下,需要登录后才能访问该页面: 对应页面:/WEB-INF/page/menu/home.jsp <%@ page langu ...

  5. goole进不去?

    1.把hosts文件放到C:\Windows\System32\drivers\etc目录下就可以上了.hosts文件自己下载 2. 上vpn ,注册个账号,每个账号500M的FQ流量也可以

  6. vscode 代码保存时自动格式化成 ESLint 风格

    vscode 的默认的代码格式化 alt+shift+f (windows) 无法通过 eslint 的代码风格检查,,, 比如: 4个空格和2个空格(ESLint) 字符串用单引号(ESLint) ...

  7. lunux系统安全

    1.清除不必要的系统帐户 [root@deep]# userdel adm [root@deep]# userdel lp [root@deep]# userdel sync [root@deep]# ...

  8. Mysql的存储引擎和索引

    可以说数据库必须有索引,没有索引则检索过程变成了顺序查找,O(n)的时间复杂度几乎是不能忍受的.我们非常容易想象出一个只有单关键字组成的表如何使用B+树进行索引,只要将关键字存储到树的节点即可.当数据 ...

  9. 204-React DOM 元素

    一.概述 为了提高性能和跨浏览器兼容性,React实现了一个独立于浏览器的DOM系统. 在React中,所有DOM属性和属性(包括事件处理程序)都应该是camelCased的.例如,HTML属性tab ...

  10. js动态移动滚动条至底部示例

    使用js动态移动滚动条至底部. var currentPosition,timer;  function GoBottom(){  timer=setInterval("runToBotto ...