最大連通域

#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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章