AcWing 1233. DFS写法
原题链接
简单
作者:
柳晨荫
,
2021-03-14 20:42:26
,
所有人可见
,
阅读 672
Y总在蓝桥杯AB组是BFS写法,下面是DFS写法
#include<iostream>
#include<queue>
#include<cstring>
const int N=1010;
char g[N][N];
bool st[N][N];
int n;
int dx[]={-1,1,0,0},dy[]={0,0,-1,1};
using namespace std;
//如果没有遍历过,洪水灌溉一下
//因为里那个要比较,C++只能返回一个数
int dfs(int x,int y,int &total,int &bound)
{
//判断是否是边界
bool is_bound = false;
st[x][y]=true;
total++;
for(int i=0;i<4;i++)
{
int tx = x+dx[i],ty = y+dy[i];
if(tx>0&&tx<n&&ty>0&&ty<n&&g[tx][ty]=='#'&&st[tx][ty]==false)
{
dfs(tx,ty,total,bound);
}
if(g[tx][ty]=='.')
{
is_bound = true;
}
}
if(is_bound==true)
{
bound++;
}
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
scanf("%s",&g[i]);
}
int cnt =0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(!st[i][j]&&g[i][j]=='#')
{
int total=0,bound=0;
dfs(i,j,total,bound);
if(total==bound) cnt++;
//cout<<total<<' '<<bound<<endl;
}
printf("%d\n",cnt);
return 0;
}