刷LeetCode刷到搜索,想先在nyoj上回想两道之前做过的。
# include<cstdio>
# include<cstdlib>
# include<string.h>
using namespace std;
int n,m;
int map[110][110];
int fx[4][2]={0,1,0,-1,1,0,-1,0};
void BFS(int x,int y){
int nx,ny;
for(int i=0 ;i<4 ;i++){
nx=x+fx[i][0];
ny=y+fx[i][1];
if(nx>=0 && nx<n && ny>=0 && ny<m &&map[nx][ny]== 1){
map[nx][ny]=0;
BFS(nx,ny);
}
}
}
int main(){
int T,count;
scanf("%d",&T);
while(T--){
memset(map,0,sizeof(map));
count=0;
scanf("%d %d",&n,&m);
for(int i=0 ;i<n ;i++)
for(int j=0 ; j<m; j++)
scanf("%d",&map[i][j]);
for(int i=0 ;i<n; i++)
for(int j=0 ;j<m ;j++){
if(map[i][j]==1 ){
count++;
BFS(i,j);
}
}
printf("%d\n",count);
}
}
# include<cstd