最近在狂练DFS搜素
打算把每个题的DFS写法都补上供有需要的同学参考
算法1
DFS
C++ 代码
#include<iostream>
#include<cstdio>
using namespace std;
const int N=50+10;
int g[N][N];
bool st[N][N];
int n,m;
int dx[4]={0,-1,0,1};
int dy[4]={-1,0,1,0};
int dfs(int a,int b,int &cur)
{
st[a][b]=true;
for(int i=0;i<4;i++)
{
int x=a+dx[i];
int y=b+dy[i];
if(x<0||x>=n||y<0||y>=m||st[x][y]==true)
continue;
if(g[a][b]>>i&1)
continue;
cur++;
dfs(x,y,cur);
}
return 1;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
scanf("%d",&g[i][j]);
int cnt=0;
int area=0;
int cur=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(st[i][j]==true)
continue;
cnt++;
for(int k=0;k<4;k++)
{
int x=i+dx[k];
int y=j+dy[k];
if(x<0||x>=n||y<0||y>=m||st[x][y]==true)
continue;
if(g[i][j]>>k&1)
continue;
cur++;
dfs(x,y,cur);
area=max(cur,area);
cur=0;
}
}
printf("%d\n%d",cnt,area);
return 0;
}