原题链接
跟这题差不了多少,改个方向数组的事
Code:
#include<bits/stdc++.h>
using namespace std;
void read(int &x)
{
char ch=getchar();
int r=0,w=1;
while(!isdigit(ch))w=ch=='-'?-1:1,ch=getchar();
while(isdigit(ch))r=(r<<3)+(r<<1)+(ch^48),ch=getchar();
x=r*w;
}
const int N=110;
int a[N][N],f[N][N],n,m,ans;
struct kkk
{
int x,y;
};
queue<kkk>q;
int dx[]={-1,-2,0,0,0,0,1,2,-1,-1,1,1};
int dy[]={0,0,-1,-2,1,2,0,0,-1,1,1,-1};
void bfs(int x,int y)
{
f[x][y]=1;
q.push(kkk{x,y});
while(!q.empty())
{
kkk t=q.front();
q.pop();
for(int i=0;i<=11;i++)
{
int tx=t.x+dx[i],ty=t.y+dy[i];
if(tx>0&&tx<=n&&ty>0&&ty<=m&&a[tx][ty]&&!f[tx][ty])
q.push(kkk{tx,ty}),f[tx][ty]=1;
}
}
}
main()
{
read(n);read(m);
char c;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>c;
if(c=='#')a[i][j]=1;
else a[i][j]=0;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(a[i][j]&&!f[i][j])
{
ans++;
bfs(i,j);
}
}
cout<<ans;
return 0;
}