题目传送门

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

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

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

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

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

 #include<cstdio>
#include<queue>
#include<algorithm>
#include<cstring> using namespace std; int n,m,cnt,tmp;
int dx[]={,,-,,};
int dy[]={,,,,-};
int block[][],mark[*];
char qwq[],mapp[][];
bool vis[][]; bool pd(int x,int y,int xx,int yy)
{
if(mapp[x][y]==''&&mapp[xx][yy]=='') return ;
if(mapp[x][y]==''&&mapp[xx][yy]=='') return ;
return ;
} bool valid(int x,int y)
{
if(x>=&&x<=n&&y>=&&y<=n) return ;
return ;
} void dfs(int nowx,int nowy,int pos)
{
vis[nowx][nowy]=;mark[pos]++;block[nowx][nowy]=pos;
for(int i=;i<=;i++)
if(valid(nowx+dx[i],nowy+dy[i])&&pd(nowx,nowy,nowx+dx[i],nowy+dy[i])&&!vis[nowx+dx[i]][nowy+dy[i]])
dfs(nowx+dx[i],nowy+dy[i],pos);
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%s",qwq+);
for(int j=;j<=n;j++) mapp[i][j]=qwq[j];
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(!block[i][j])
{
cnt++;
dfs(i,j,cnt);
}
for(int i=;i<=m;i++)
{
int x=,y=;
scanf("%d%d",&x,&y);
printf("%d\n",mark[block[x][y]]);
}
return ;
}

最新文章

  1. Moses 安装
  2. vs2010/2013项目的C++所在文件夹越来越大如何解决?
  3. c#-SimHash匹配相似-算法
  4. JavaScript的apply和call方法及其区别
  5. PHP session的实现原理
  6. 快速同步mysql数据到redis中
  7. iOS 开发--开源图片处理圆角
  8. VC中的Attach和Detach
  9. 对手机SD卡的一些操作
  10. Linux开机自启动
  11. 2015 Multi-University Training Contest 9
  12. BitMap 算法
  13. PHP提取页面第一张图为缩略图的代码
  14. 整理+学习《骆昊-Java面试题全集(上)》
  15. HDU4609 计数问题+FFT
  16. 基于Python使用Redis的一些想法和建议
  17. KNIME + Python = 数据分析+报表全流程
  18. Linux下ps -ef 和 ps aux的区别
  19. Qt之QLocalServer
  20. centos的 / ~ - 的意思

热门文章

  1. hunnu--11545--小明的烦恼——找路径
  2. 重构机房收费系统你要用的——异常处理和抛出异常(try catch finally)——(vb.net)
  3. npm WARN uninstall not installed in /Users/hrt0kmt/node_modules: &quot;xxx&quot;
  4. Python中怎样用pip安装外部主机文件
  5. 图像物体检測识别中的LBP特征
  6. fminunc
  7. redis08----集群
  8. 51Nod 1089 最长回文子串 V2 —— Manacher算法
  9. 关于eclipse的resource文件没有发布到tomcat上的解决方案
  10. magento导入数据的方法