题意:
求一个矩阵里面有几个板块。
思路:
用广搜。搜到一个就清除周边连接的板块,然后统计个数。
代码:
#include<cstdio>
using namespace std;
int ans,n,m,state[600][3];
char c;
short dx[4]={1,-1,0,0},dy[4]={0,0,-1,1};
bool a[61][61];
void bfs(int p,int q)
{
int head,tail,x,y;
head=0;tail=1;
state[1][1]=p;state[1][2]=q;a[p][q]=false;
do
{
head++;
for (int i=0;i<=3;i++)
{
x=state[head][1]+dx[i];
y=state[head][2]+dy[i];
if (x>=1&&x<=m&&y>=1&&y<=n&&a[x][y])
{
tail++;
state[tail][1]=x;
state[tail][2]=y;
a[x][y]=false;//清除
}
}
}
while(head<tail);
}
int main()
{
scanf("%d%d",&m,&n);c=getchar();
for (int i=1;i<=m;i++)
{
for (int j=1;j<=n;j++)
{
c=getchar();
if (c>'0'&&c<='9')
a[i][j]=true;
else a[i][j]=false;
}
c=getchar();
}
for (int i=1;i<=m;i++)
for (int j=1;j<=n;j++)//一个一个判断
if (a[i][j])//是的话就清除周边板块
{
bfs(i,j);//清除周边板块
ans++;
}
printf("%d",ans);
}