#include <stdio.h>
#include <string.h>
int m, n;
int a[105][105];//水池坐标
int num;
int mx[] = {1, 0, -1, 0};//方向数组
int my[] = {0, 1, 0, -1};
void dfs(int x, int y);
void search() {
int i, j;
//LOOP:
// 找到水池坐标
// 搜索路径, num+1
//
for(i=0; i<m; i++) {
for(j=0; j<n; j++) {
if(a[i][j] == 1) {
a[i][j] = 0;
num++;
dfs(i, j);
}
}
}
}
//搜索路径,一般情况
void dfs(int x, int y) {
int i;
//到达边界或者无路可通,退出
//搜索知道走完一条路径,num+1;继续搜索其他
for(i=0; i<4; i++) {
x += mx[i];
y += my[i];
if(x>=0&&x<m && y>=0&&y<n && a[x][y]==1) {
a[x][y] = 0;
dfs(x, y);
}
x -= mx[i];
y -= my[i];
}
}
int main() {
int N;
scanf("%d", &N);
while(N--) {
memset(a, 0, sizeof(a));
scanf("%d %d", &m, &n);
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
scanf("%d", &a[i][j]);
num = 0;
search();
// for(int i=0; i<m; i++) {
// for(int j=0; j<n; j++)
// printf("%d ", a[i][j]);
// printf("\n");
// }
printf("%d\n", num);
}
return 0;
}
nyoj 27水池问题
最新推荐文章于 2019-03-13 13:28:40 发布