#include<iostream>
#include<cstring>
const int N=100;
using namespace std;
int n,m;
int mp[N][N];
int dir[4][2] = {{-1,0},{0,1},{1,0},{0,-1}};
void dfs(int si,int sj)
{
mp[si][sj] = 0; //这道题没有必要回溯,直接更改就可以了
int di,i,j;
for(di=0;di<4;di++)
{
i = si + dir[di][0];
j = sj + dir[di][1];
if (i>=0 &&i<m && j>=0 && j<n && mp[i][j])
dfs(i,j);
}
}
int main()
{
int t,cnt;
cin>>t;
while(t--)
{
cin>>m>>n;
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>mp[i][j];
cnt = 0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if (mp[i][j]==1)
{
cnt++;
dfs(i,j);
}
cout<<cnt<<endl;
}
return 0;
}
NYOJ-27:水池数目
最新推荐文章于 2020-11-22 10:30:40 发布