Flood Fill 2:城堡问题
作者:
总打瞌睡的天天啊
,
2024-10-20 11:12:10
,
所有人可见
,
阅读 1
//max记录一共走了多少步,初始化
//flood fill 删除点
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=60;
int n,m,maxx,res;
int g[N][N];
bool st[N][N];
//模拟队列
typedef pair<int,int> PII;
PII q[N*N];
int dx[4]={0,-1,0,1},dy[4]={-1,0,1,0};
int bfs(int x,int y)
{
int hh=0,tt=0,area=0;
q[0]={x,y};
st[x][y]=1;
while(hh<=tt)
{
PII t=q[hh++];
area++;
for(int i=0;i<4;i++)
{
int a=t.first+dx[i],b=t.second+dy[i];
if(a>n||a<1||b<1||b>m)continue;
if(st[a][b])continue;
if(g[t.first][t.second]>>i&1)continue;//这个方向得按题目分析,东南西北
st[a][b]=1;
q[++tt]={a,b};
}
}
return area;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>g[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(!st[i][j])
{
res++;
maxx=max(maxx,bfs(i,j));
}
}
cout<<res<<endl;
cout<<maxx<<endl;
return 0;
}