南阳oj27题
2014-03-13 12:05
190 查看
水池数目
时间限制:3000 ms | 内存限制:65535 KB
难度:4
描述南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地图上仅标识了此处是否是水池,现在,你的任务来了,请用计算机算出该地图中共有几个水池。输入第一行输入一个整数N,表示共有N组测试数据
每一组数据都是先输入该地图的行数m(0<m<100)与列数n(0<n<100),然后,输入接下来的m行每行输入n个数,表示此处有水还是没水(1表示此处是水池,0表示此处是地面)输出输出该地图中水池的个数。
要注意,每个水池的旁边(上下左右四个位置)如果还是水池的话的话,它们可以看做是同一个水池。样例输入
2 3 4 1 0 0 0 0 0 1 1 1 1 1 0 5 5 1 1 1 1 0 0 0 1 0 1 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1
样例输出
2 3
#include <iostream> using namespace std; #define MAX 102 char map[MAX][MAX]; int n, m; int dir[4][2] = {0,-1,1,0,0,1,-1,0}; void dfs(int i,int j) { int x, y; map[i][j] = '0'; for(int k=0; k<4; k++) { x = i + dir[k][0]; y = j + dir[k][1]; if (x<0 || x>=n || y<0 || y>=m) continue; if (map[x][y] == '1') dfs(x,y); } } int main() { int i, j; int c; cin>>c; while(c--) { cin>>n>>m; for (i=0; i<n; i++) for (j=0; j<m; j++) cin>>map[i][j]; int count = 0; for (i=0; i<n; i++) { for (j=0; j<m; j++) { if (map[i][j] == '1') { dfs(i,j); count++; } } } cout<<count<<endl; } return 0; }
同类型的题目还有POJ 2386题
相关文章推荐
- 南阳oj 27 dfs入门
- 南阳OJ 题目27 水池数目
- c之深度搜索例题,南阳oj27--水池数目
- 南阳 oj 题目27 水池数目
- 数的长度【南阳 oj 题目69】
- 南阳OJ 108 士兵杀敌(一)【线段树模板】
- 【南阳OJ119】士兵杀敌(三)(线段树)
- 南阳 oJ 585 尼姆博弈
- 南阳oj 棋盘覆盖 题目45
- 南阳oj 1085 AC自动机 一般(有点坑)
- 南阳oj 蛇形填数 题目33
- 南阳oj 阶乘因式分解(一)
- 字母统计(南阳oj241)(水题)
- 不能被整除的数(南阳oj1160)(数学题)
- 非洲儿童(南阳oj1036)(馋)
- 数字整除(南阳oj664)(模拟数学)
- 南阳OJ 16 矩形嵌套
- 南阳oj 第15题 括号匹配(二)
- 兰州烧饼(南阳oj779)
- 南阳OJ 517:最小公倍数