您的位置:首页 > 编程语言 > C语言/C++

NYOJ题目27-水池数目(搜索)

2016-03-18 11:53 267 查看
描述

南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地图上仅标识了此处是否是水池,现在,你的任务来了,请用计算机算出该地图中共有几个水池。

输入

第一行输入一个整数N,表示共有N组测试数据

每一组数据都是先输入该地图的行数m(0

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>

using namespace std;

int Map[101][101];
int book[101][101];
int next[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
int num;
int m,n;

void dfs(int x, int y, int color){
Map[x][y] = color;

for(int i = 0; i < 4; i++){
int tx = x + next[i][0];
int ty = y + next[i][1];

if(tx < 1 || tx > m || ty < 1 || ty > n)
continue;
if(Map[tx][ty] > 0 && book[tx][ty] == 0){
book[tx][ty] = 1;
dfs(tx,ty,color);
}
}
return ;
}
int main(){
int N;
cin >> N;
while(N--){
cin >> m >> n;
int num = 0;
for(int i = 1; i <= m; i++)
for(int j = 1; j <= n; j++){
cin >> Map[i][j];
book[i][j] = 0;
}
for(int i = 1; i <= m; i++)
for(int j = 1; j <= n; j++){
if(Map[i][j] > 0){
num--;
book[i][j] = 1;
dfs(i,j,num);
}
}

cout << -num << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  搜索 C++