题目传送门

我tm到现在还需要刷这种水搜索...我退役吧。

但就是搜索弱嘛 补一补嘛qwq

题目大意:给你一张地图与许多询问,每次询问求这个点所在联通块的点的个数。

所以这个题目的本质就是在求联通块。可以联想到那天测试的题,把看似bfs的题写成dfs。

注意:联通块数组开小了导致RE===

  1. #include<cstdio>
  2. #include<queue>
  3. #include<algorithm>
  4. #include<cstring>
  5.  
  6. using namespace std;
  7.  
  8. int n,m,cnt,tmp;
  9. int dx[]={,,-,,};
  10. int dy[]={,,,,-};
  11. int block[][],mark[*];
  12. char qwq[],mapp[][];
  13. bool vis[][];
  14.  
  15. bool pd(int x,int y,int xx,int yy)
  16. {
  17. if(mapp[x][y]==''&&mapp[xx][yy]=='') return ;
  18. if(mapp[x][y]==''&&mapp[xx][yy]=='') return ;
  19. return ;
  20. }
  21.  
  22. bool valid(int x,int y)
  23. {
  24. if(x>=&&x<=n&&y>=&&y<=n) return ;
  25. return ;
  26. }
  27.  
  28. void dfs(int nowx,int nowy,int pos)
  29. {
  30. vis[nowx][nowy]=;mark[pos]++;block[nowx][nowy]=pos;
  31. for(int i=;i<=;i++)
  32. if(valid(nowx+dx[i],nowy+dy[i])&&pd(nowx,nowy,nowx+dx[i],nowy+dy[i])&&!vis[nowx+dx[i]][nowy+dy[i]])
  33. dfs(nowx+dx[i],nowy+dy[i],pos);
  34. }
  35.  
  36. int main()
  37. {
  38. scanf("%d%d",&n,&m);
  39. for(int i=;i<=n;i++)
  40. {
  41. scanf("%s",qwq+);
  42. for(int j=;j<=n;j++) mapp[i][j]=qwq[j];
  43. }
  44. for(int i=;i<=n;i++)
  45. for(int j=;j<=n;j++)
  46. if(!block[i][j])
  47. {
  48. cnt++;
  49. dfs(i,j,cnt);
  50. }
  51. for(int i=;i<=m;i++)
  52. {
  53. int x=,y=;
  54. scanf("%d%d",&x,&y);
  55. printf("%d\n",mark[block[x][y]]);
  56. }
  57. return ;
  58. }

Luogu P1141 01迷宫【搜索/dfs】By cellur925的更多相关文章

  1. luogu P1141 01迷宫 x

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

  2. 洛谷P1141 01迷宫【DFS】

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

  3. luogu P1141 01迷宫

    https://www.luogu.org/problem/show?pid=1141 还不太会用 BFS 然后就跟着感觉走了一波 经历了很多错误 刚开始的读入 然后BFS的过程 最后T三个点 看到别 ...

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

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

  5. 洛谷——P1141 01迷宫

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

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

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

  7. P1141 01迷宫 dfs连通块

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

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

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

  9. P1141 01迷宫

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

随机推荐

  1. RAC改动归档文件夹

    逐个节点改动 关闭全部节点,启动单节点(rac1)到mount状态 SQL> startup mount; 改动server參数配置 SQL> alter system set clust ...

  2. Linux CentOS下安装、配置mysql数据库

    假设要在Linux上做j2ee开发.首先得搭建好j2ee的开发环境.包含了jdk.tomcat.eclipse的安装(这个在之前的一篇随笔中已经有具体解说了Linux学习之CentOS(七)--Cen ...

  3. postgres SQL编译过程

    PG启动首先完成主进程和后台进程的启动,启动时完成数据库文件的打开,共享内存的建立等.接着,所有SQL都会启动1个单独的进程处理SQL的执行过程. 新的进程首先是进行自身的初始化,最主要的是初始化内存 ...

  4. PostgreSQL 源码解读 node的模拟实现

      node的实现是PostgreSQL的查询解析的基础,实现的关键是两个宏,makeNode和newNode.其他节点继承自Node节点,如果增加新的结构体,需要添加NodeTag中添加对应的枚举值 ...

  5. 第一讲:使用html5——canvas绘制奥运五环

    <html> <head> <title>初识canvas</title> </head> <body> <canvas ...

  6. java线程阻塞(sleep,suspend,resume,yield,wait,notify)

    为了解决对共享存储区的访问冲突,Java 引入了同步机制,现在让我们来考察多个线程对共享资源的访问,显然同步机制已经不够了,因为在任意时刻所要求的资源不一定已经准备好了被访问,反过来,同一时刻准备好了 ...

  7. Java,多个线程对同一个数据源的访问

    当多个线程对同一个数据源进行访问时,应对线程同步或加锁.为何?举个简单的例子:有一个共享的数据源dataSource,其值为0.有两个线程,Thread1和Thread2.Thread1的任务是将da ...

  8. redis03----集合 set 相关命令

    集合 set 相关命令 集合的性质: 唯一性,无序性,确定性 注: 在string和link的命令中,可以通过range 来访问string中的某几个字符或某几个元素 但,因为集合的无序性,无法通过下 ...

  9. vue中引入字体文件

    在用vue来写一官网的时候,想引入外部字体文件,毕竟总感觉他自己的字体有点难看,在这里记录下 1.先下载字体文件所需的.ttf文件 我这里想引入的是华文行楷字体 百度后下载了一个3M多的ttf文件 2 ...

  10. css 中的伪类选择器before 与after

    .cf:after,.cf:before {content: " "; display: table;} .cf:after {clear: both;} :before是因为ta ...