1.求水洼数
小雪家的前面有一个坪,但是这个坪不平,下雨后,
就会有“水洼,水坑”
输入:
M*N
1 1 0 0 1
1 1 0 0 1
0 0 1 1 0
....
1表示此处有水,0表示此处没水
一个点的水,会和周围其他的点的水连成一个大水洼,
最后求水洼的数量
周围:上下左右
#include <stdio.h>
#define M 5
#define N 5
void Write(int a[][N], int m);
int Check(int a[][N], int n, int i, int j, int flag);
int main(int argc, char * argv[])
{
int a[M][N], i, j, count = 0, flag;
Write( a,M);
for(i = 0; i < M; i ++)
{
for(j = 0 ; j < N; j++)
{
if(a[i][j] == 1)
{
flag = 0;
a[i][j] = 0;
flag = Check(a, N, i, j, flag);
if(flag == 1)
count++;
}
}
}
printf("There are %d\n", count);
return 0;
}
void Write(int a[][N], int m)
{
int i, j;
for(i = 0; i < M; i++)
{
for(j = 0; j < N; j++)
{
scanf("%d", &a[i][j]);
}
}
}
int Check(int a[][N], int n, int i, int j, int flag)
{
if(i != 0 && a[i - 1][j]==1)
{
a[i -1][j] = 0;
Check(a, n, i-1, j, flag);
flag = 1;
}
if(i != M-1 && a[i + 1][j]== 1)
{
a[i + 1][j ] = 0;
Check(a, n, i+1, j, flag);
flag = 1;
}
if(j != 0 && a[i] [j -1] == 1)
{
a[i][j - 1] = 0;
Check(a, n, i, j - 1, flag);
flag = 1;
}
if(j != N-1 && a[i][j + 1])
{
a[i][j+1] = 0;
Check(a, n, i, j+1, flag);
flag = 1;
}
return flag;
}