栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C++岛问题】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C++岛问题】

题目:

矩阵中相邻的1组成一个岛,求一个矩阵中岛的个数:
例如:下面矩阵岛数为4
0, 0, 1, 0, 1, 0,
1, 1, 1, 0, 1, 0
1, 0, 0, 1, 0, 0
0, 0, 0, 0, 1, 1


TIPS:

感染过程用递归法进行实现
二维数组指针int(*p)[] 需要打括号,int *p[]表示指针类型的数组

代码:

参考左神代码编写:

#include 
using namespace std;

void infect(int (*p)[6], int i, int j, int hang, int lie)
{
    if (i < 0 || j < 0 || i >= hang || j >= lie || p[i][j] != 1) //返回条件
    {
        return;
    }
    p[i][j] = 2;                    //将值为1的点改为2
    infect(p, i - 1, j, hang, lie); //在左右上下方向上进行感染
    infect(p, i + 1, j, hang, lie);
    infect(p, i, j - 1, hang, lie);
    infect(p, i, j + 1, hang, lie);
}

int Island_count(int (*p)[6], int hang, int lie)
{
    if (p == nullptr || p[0] == NULL)
    {
        return 0;
    }
    int count = 0; //记录岛个数
    for (int i = 0; i < hang; ++i)
    {
        for (int j = 0; j < lie; ++j)
        {
            if (p[i][j] == 1) //找到为1的点后进行感染F
            {
                ++count;
                infect(p, i, j, hang, lie);
            }
        }
    }
    return count;
}

int main()
{
    int arr[4][6] = {{0, 0, 1, 0, 1, 0},
                     {1, 1, 1, 0, 1, 0},
                     {1, 0, 0, 1, 0, 0},
                     {0, 0, 0, 0, 1, 1}};
    int all = sizeof(arr) / sizeof(int);    //总长度
    int lie = sizeof(arr[0]) / sizeof(int); //行数
    int hang = all / lie;                   //列数
    int count = Island_count(arr, hang, lie);
    cout << "岛的个数为:" << count << endl;
    return 0;
}

结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873383.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号