/*求一个二维数组里的水洼
0代表有水,1代表没水,八个方向的水可以连起来组成大水洼
1 0 0 1 0
1 0 1 0 1
0 1 0 1 1
1 0 1 1 0
上面由两个水洼*/
#include <stdio.h>
#define N 5
#define M 5
/*
将a[i][j]这个水洼以及水洼的周边以及周边的周边...为0的地方全部变成1
*/
void clear(int a[][M],int i,int j)
{
if(i>=N || i<0 || j>=M || j <0 || a[i][j]==1)//如果a[i][j]不存在或者不是水洼,就不要进行这个操作
{
return;
}
a[i][j]=1; //把本身置为1
for(int m = i-1;m<=i+1;m++)
{
for(int n=j-1;n<=j+1;n++) //这两次for循环就是判断a[i][j]以及它周围有没有水洼
{
if(a[m][n]==0)//如果有
{
clear(a,m,n); //再以a[m][n]为中心
}
}
}
}
int main()
{
int shuiwa=0;
int a[5][5]={
1,0,0,1,0,
0,1,1,0,1,
1,0,0,1,0,
1,0,1,1,1,
0,1,1,1,0
};
for(int i=0;i<N;i++)
{
for(int j=0;j<M;j++)
{
if(a[i][j]==0)
{
shuiwa++;
clear(a,i,j);//把周围清空
}
}
}
printf("%d\n",shuiwa);
}