水池数目(DFS)
试题链接:点击打开链接
#include <iostream>
#include <cstring>
using namespace std;
int m,n;
int Map[105][105];
int color[105][105];
int num=0;
int area;
int areaMax;
void DFS(int i,int j)
{
if(color[i][j])
return;
area++;
color[i][j]=num;
if(i>1 && Map[i-1][j]==1) DFS(i-1,j); //向上走
if(i<m && Map[i+1][j]==1) DFS(i+1,j); //向下走
if(j>1 && Map[i][j-1]==1) DFS(i,j-1); //向右走
if(j<n && Map[i][j+1]==1) DFS(i,j+1); //向左走
}
int main()
{
int N;
cin>>N;
while(N--)
{
num=0;
cin>>m>>n;
for(int i=1; i<=m; i++)
for(int j=1; j<=n; j++)
cin>>Map[i][j];
memset(color,0,sizeof(color));
for(int i=1; i<=m; i++)
{
for(int j=1; j<=n; j++)
{
if(color[i][j]==0 && Map[i][j]==1)
{
num++;
area=0;
DFS(i,j);
areaMax=max(area,areaMax);
}
}
}
cout<<num<<endl;
//cout<<areaMax<<endl; //输出最大面积
}
return 0;
}