解
2024-08-08 20:47:58
发布于:浙江
11阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int n,m,sum=0;
int arr[101][101]={0};//数组
bool v[101][101]={0};//是否访问过
short d[4][2]={{0,1},{0,-1},{1,0},{-1,0}};//坐标偏移量
void dfs(int x,int y)//深搜
{
sum++;//更新连续黑块数量
v[x][y]=1;//访问过了
for(int i=0;i<4;i++)//往东西南北延伸
{
int xx=x+d[i][0];//将要访问的x坐标
int yy=y+d[i][1];//将要访问的y坐标
if(arr[xx][yy]==1 && v[xx][yy]==0 && xx>=0 && xx<n && yy>=0 && yy<m)//如果没被访问过 是黑色的 要访问的位置没有超限
{
dfs(xx,yy);//开始延伸
}
}
}
int main()
{
int ans=0;//最终答案
cin >> n >> m;//输入长宽
for(int i=0;i<n;i++)//开始输入数组
{
for(int j=0;j<m;j++)
{
cin >> arr[i][j];
}
}
for(int i=0;i<n;i++)//开始遍历连续黑块数量
{
for(int j=0;j<m;j++)
{
if(arr[i][j]==1 && v[i][j]==0)//如果是黑色的而且没被访问过
{
dfs(i,j);//开始搜索
ans=max(ans,sum);//更新答案
sum=0;
}
}
}
cout << ans;//输出答案
return 0;
}
这里空空如也
有帮助,赞一个