最大连通域

Posted 爆米花好美啊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最大连通域相关的知识,希望对你有一定的参考价值。

#include <iostream>
using namespace std;
int max_area=0;
void dfs(int a[][10], int i, int j, int h, int w, int flag, int area)
    a[i][j] = -flag;
    if(i-1>=0 && a[i-1][j] > 0)
        area++;
        dfs(a, i-1, j, h, w, flag, area);
    
    if(j-1>=0 && a[i][j-1] > 0)
        area++;
        dfs(a, i, j-1, h, w, flag, area);
    
    if(i+1<h && a[i+1][j] > 0)
        area++;
        dfs(a, i+1, j, h, w, flag, area);
    
    if(j+1<w && a[i][j+1] > 0)
        area++;
        dfs(a, i, j+1, h, w, flag, area);
    
    area++;
    if(area > max_area)
        max_area = area;
    

int main() 
    // cout << "Hello World!" << endl;
    int a[10][10];
    for(int i = 0; i < 10; i++)
        for(int j = 0; j < 10; j++)
            a[i][j] = 0;
        
    
    a[1][1] = 1;
    a[1][2] = 1;
    a[4][5] = 2;
    a[5][5] = 2;
    a[6][5] = 2;
    a[5][4] = 2;
    a[5][6] = 2;
    int flag = 1;
    int area = 0;
    for(int i = 0; i < 10; i++)
        for(int j = 0; j < 10; j++)
            if(a[i][j] > 0)
                area = 0;
                dfs(a, i, j, 10, 10, flag, area);
                flag++;
            
        
    
    for(int i = 0; i < 10; i++)
        for(int j = 0; j < 10; j++)
          cout<<a[i][j]<<" ";
        
        cout<<endl;
    
    cout<<max_area<<endl;

0 0 0 0 0 0 0 0 0 0
0 -1 -1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 -2 0 0 0 0
0 0 0 0 -2 -2 -2 0 0 0
0 0 0 0 0 -2 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
5

附录

如何将二维数组作为函数的参数传递
https://blog.csdn.net/xuleicsu/article/details/919801

以上是关于最大连通域的主要内容,如果未能解决你的问题,请参考以下文章

对图像中连通域进行标记并计算面积matlab

matlabcell特征描述子怎么画

matlab联通域都长度和宽度

二值图像连通域标记算法优化

一种基于连通分量的文本区域定位方法

OpenCV连通域相关操作