AcWing 1098. 城堡问题(dfs版)
原题链接
简单
作者:
小菜鸡UP
,
2020-04-16 18:23:37
,
所有人可见
,
阅读 860
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int const maxn=55;
int a[maxn][maxn];
int vis[maxn][maxn];
int rx,ry;
int ans=0;
int dfs(int x,int y)
{
if(x>=1&&x<=rx&&y>=1&&y<=ry&&!vis[x][y])
{
vis[x][y]=1;//怎么第一个点就一个if都没进直接到return res了
///以后& |运算的时候加括号!!!!!!!
ans++;
if( (a[x][y]&1)==0) dfs(x,y-1);
if( (a[x][y]&2)==0) dfs(x-1,y);
if( (a[x][y]&4)==0) dfs(x,y+1);
if( (a[x][y]&8)==0) dfs(x+1,y);
}
return ans;//这样是没法返回出来最终的res的
}
int main(void)
{
cin.tie(0);
std::ios::sync_with_stdio(false);
while(cin>>rx>>ry)
{
memset(a,0,sizeof(a));memset(vis,0,sizeof(vis));
int roomnum=0;int maxroom=0;
for(int i=1;i<=rx;i++)
for(int j=1;j<=ry;j++)
cin>>a[i][j];
for(int i=1;i<=rx;i++)
for(int j=1;j<=ry;j++)
{
if(!vis[i][j])
{
roomnum++;
ans=0;dfs(i,j);
maxroom=max(ans,maxroom);
}
}
cout<<roomnum<<endl<<maxroom<<endl;;
}
return 0;
}
###不知道哪里出了问题,请高数大佬帮忙看一下
阿下午在比赛,晚上有比赛.您找找抽风姐姐叭
帮你改了一下,可以AC了