C++编程题 棋盘涂色

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 来解决