#include<bits/stdc++.h>
using namespace std;
int M,N,cnt;
char Map[55][55];
//找外海
int d[8][2]=
{
{0,-1},
{0,1},
{1,0},
{-1,0},
{1,1},
{1,-1},
{-1,1},
{-1,-1}
};
void dfs_sea(int x,int y)
{
Map[x][y]='2';
for(int i=0;i<8;i++)
{
int tx=x+d[i][0],ty=y+d[i][1];
if(tx>=0&&tx<=M+1&&ty>=0&&ty<=N+1&&Map[tx][ty]=='0')
dfs_sea(tx,ty);
}
}
//找与外海相邻的岛,一定是外岛
void dfs_island(int x,int y)
{
Map[x][y]='3';//防止主函数里重复搜索
for(int i=0;i<4;i++)
{
int tx=x+d[i][0],ty=y+d[i][1];
if(tx>=1&&tx<=M&&ty>=1&&ty<=N&&Map[tx][ty]=='1')
dfs_island(tx,ty);
}
}
int main()
{
int T;
cin >> T;
while(T--)
{
cin >> M>>N;
//把最外圈变成海
for(int i=0;i<=M+1;i++)
for(int j=0;j<=N+1;j++)
Map[i][j]='0';
//输入地图
for(int i=1;i<=M;i++)
for(int j=1;j<=N;j++)
cin>>Map[i][j];
dfs_sea(0,0);
cnt=0;//答案
for(int i=1;i<=M;i++)
{
for(int j=1;j<=N;j++)
{
if(Map[i][j]=='1' && Map[i][j-1]=='2')
{
dfs_island(i,j);
cnt++;
}
}
}
cout << cnt<<endl;
}
return 0;
}
0 回复
0 转发
4 喜欢
4 阅读



