博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Luogu P1141 01迷宫【搜索/dfs】By cellur925
阅读量:5343 次
发布时间:2019-06-15

本文共 1614 字,大约阅读时间需要 5 分钟。

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

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

 

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

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

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

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

 

转载于:https://www.cnblogs.com/nopartyfoucaodong/p/9571766.html

你可能感兴趣的文章
将html代码中的大写标签转换成小写标签
查看>>
jmeter多线程组间的参数传递
查看>>
零散笔记
查看>>
MaiN
查看>>
[Python学习] 简单网络爬虫抓取博客文章及思想介绍
查看>>
触发器课程SQL Server 知识梳理九 触发器的使用
查看>>
信息浏览器从Android的浏览器中传递cookie数据到App中信息浏览器
查看>>
客户端连接linux虚拟机集群报错
查看>>
linux下部署一个JavaEE项目的简单步骤
查看>>
hash储存机制
查看>>
[Android学习系列16]Android把php输出的json加载到listview
查看>>
20145205 《信息安全系统设计基础》第14周学习总结
查看>>
6)添加一个窗口的图标
查看>>
POJ - 1422 Air Raid 二分图最大匹配
查看>>
Road Map
查看>>
正则替换中的一个Bug
查看>>
HI3531uboot开机画面 分类: arm-linux-Ubunt...
查看>>
制作U盘启动CDLinux 分类: 生活百科 ...
查看>>
strcpy函数里的小九九
查看>>
搭建ssm过程中遇到的问题集
查看>>