1、最大连续区域。
有一个NxN大小的黑白棋盘,上面每格不是黑色就是白色,有些同色格子连在一起,有些没有。请你找出最大的一片互相连接的同色区域,并计算出大小。
例如:用1表示黑子,0表示白子
当N=4
输入以下内容
1 0 1 0
1 1 1 0
0 1 0 1
0 0 0 1
输出结果为6,表示最大连续区域为6
我用的是递归搜索,试了几个测试点都没问题,但是数据太大应该就不行了
这是我的代码
#include <iostream>
using namespace std;
const int N = 10e3;
int chess[N][N],vis[N][N]; //chess是棋盘,vis是检查棋格是否搜索过
int x,num,a,max_num; //x是开始搜索的棋格的值
//num是连续区域的数量
void fun1(int xx,int yy)
{
if(vis[xx][yy]==0&&x==chess[xx][yy]&&xx<a&&yy<a&&xx>=0&&yy>=0)
//对坐标进行几个方面的判断并筛除
//1,该棋盘格是否已经搜索过
//2, 该棋盘格值是否和上一个棋盘格值相同
//3, 数组是否越界
{
vis[xx][yy]=1;
num++;
if(xx==0)
{
if(yy==0)
{
fun1(xx+1,yy);
fun1(xx,yy+1);
}
else
{
fun1(xx+1,yy);
fun1(xx,yy+1);
fun1(xx,yy-1);
}
}
else
{
fun1(xx+1,yy);
fun1(xx,yy+1);
fun1(xx-1,yy);
fun1(xx,yy-1);
}
}
max_num=max(max_num,num);
return;
}
int main()
{
cin>>a;
for(int i=0;i<a;i++)
for(int j=0;j<a;j++)
cin>>chess[i][j];
for(int i=0;i<a;i++)
for(int j=0;j<a;j++)
{
num=0;
x=chess[i][j];
fun1(i,j);
}
cout<<max_num<<endl;
return 0;
}
代码新手,所以有些地方优化不够好
有问题咱们可以一起讨论一下
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
可以使用 bfs 来解决