水池数目
来源:互联网 发布:淘宝全屏代码怎么放 编辑:程序博客网 时间:2024/04/27 18:09
- 输入
- 第一行输入一个整数N,表示共有N组测试数据
每一组数据都是先输入该地图的行数m(0<m<100)与列数n(0<n<100),然后,输入接下来的m行每行输入n个数,表示此处有水还是没水(1表示此处是水池,0表示此处是地面) - 输出
- 输出该地图中水池的个数。
要注意,每个水池的旁边(上下左右四个位置)如果还是水池的话的话,它们可以看做是同一个水池。 - 样例输入
23 41 0 0 0 0 0 1 11 1 1 05 51 1 1 1 00 0 1 0 10 0 0 0 01 1 1 0 00 0 1 1 1
- 样例输出
23
//关键字:广搜
//标程:
#include<stdio.h>#include<string.h>#include<queue>using namespace std;int p[210][210],cnt,n,m,flag;struct ss{int x,y;};queue<ss> q;int dir[4][2]={0,1,1,0,-1,0,0,-1};void bfs();void f();int main(){//freopen("a.txt","r",stdin); int t,i,j;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(i=0;i<n;i++)for(j=0;j<m;j++)scanf("%d",&p[i][j]);flag=cnt=0;f();printf("%d\n",cnt);}return 0;}void bfs(){ss b,c; while(!q.empty()){ b=q.front(); q.pop(); for(int i=0;i<4;i++) { c.x=b.x+dir[i][0]; c.y=b.y+dir[i][1]; if(p[c.x][c.y]==1) { q.push(c); p[c.x][c.y]=0; } }}if(flag==0) f();}void f(){ for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(p[i][j]==1) { if(i==n-1 && j==m-1) flag=1; p[i][j]=0; cnt++; ss a; a.x=i, a.y=j; q.push(a); bfs(); }}
0 0
- 水池数目
- 水池数目
- 水池数目
- 水池数目
- 水池数目
- 水池数目
- 水池数目
- 水池数目
- 水池数目
- 水池数目
- 水池数目
- 水池数目
- 水池数目
- 水池数目
- 水池数目
- 水池数目
- 水池数目
- 水池数目
- 2013搜狐笔试题
- Flex样式-VDividedBox篇
- eclipse 项目视图乱序问题
- Common Lisp学习之五:集合数据结构
- 关于图像特征提取
- 水池数目
- Adaboost分类器是一种迭代算法
- 2013年小结与2014年展望
- Flex样式-CheckBox篇
- SUSE Linux Enterprise 11 SP3 成功编译LLVM + Clang 3.4
- 如何高效利用GitHub
- 用树莓派通过Java实现远程控制电灯
- Golang里调用C
- java.nio.BufferOverflowException. Check the Eclipse log for stack trace.