島嶼問(wèn)題

#include <iostream>
#include <vector>
using namespace std;

int m = 4, n = 5;
int MaxLand = 0;            //最大島嶼
int temp = 0;

//使用DFS求島嶼個(gè)數(shù)和最大島嶼,如果當(dāng)前位置為1,則將島嶼數(shù)量加1,然后將該位置設(shè)置為0,然后搜索該位置的上下左右位置,若為1,則設(shè)置為0并搜索知道四周都為0
void DFS(vector<vector<bool>>& arr, int i, int j)
{
    if (i < 0 || i >= m || j < 0 || j >= n || !arr[i][j])       //到了邊界返回
    {
        return;
    }
    temp++;
    arr[i][j] = false;                      //當(dāng)前位置置為0

    DFS(arr, i - 1, j);                     //遍歷上
    DFS(arr, i + 1, j);                     //遍歷下
    DFS(arr, i, j - 1);                     //遍歷左
    DFS(arr, i, j + 1);                     //遍歷右

}

//使用DFS求最大島嶼周長(zhǎng)
vector<bool> visited;
int DFS_Perimeter(vector<vector<bool>>& arr, int i, int j)
{

    if (i < 0 || i >= m || j < 0 || j >= n || !arr[i][j])                   //邊界為島嶼的周長(zhǎng)的一部分
    {
        return 1;
    }

    if (arr[i][j] && visited[i * n + j])                                    //如果該位置已經(jīng)被訪問(wèn)且為1,說(shuō)明在島嶼中間
    {
        return 0;
    }

    visited[i * n + j] = true;                                              //標(biāo)志該位置已經(jīng)被訪問(wèn)過(guò)

    return DFS_Perimeter(arr, i - 1, j) + DFS_Perimeter(arr, i + 1, j)      //上邊界+下邊界+左邊界+右邊界
        + DFS_Perimeter(arr, i, j - 1) + DFS_Perimeter(arr, i, j + 1);
}

int main(int argc, char** argv)
{
    //step1:隨機(jī)生成一個(gè)二維數(shù)組

    vector<vector<bool>> arr;
    arr.resize(m);
    for (int i = 0; i < m; i++)
    {
        arr[i].resize(n);
        for (int j = 0; j < n; j++)
        {
            arr[i][j] = rand() % 2;
        }
    }

    //step2:打印數(shù)組
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }

    //step3:計(jì)算島嶼數(shù)量、最大島嶼面積和周長(zhǎng)
    visited.resize(m * n);                  //初始化標(biāo)志該位置未被訪問(wèn)
    int count = 0;
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (arr[i][j] && !visited[i * n + j])                   //如果該位置為1且沒(méi)有被訪問(wèn),則對(duì)該島嶼進(jìn)行DFS搜索
            {
                //計(jì)算島嶼數(shù)量和最大島嶼
                //count++;
                //DFS(arr, i, j);

                //if (temp > MaxLand)
                //{
                //  MaxLand = temp;
                //}

                //temp = 0;

                //計(jì)算島嶼周長(zhǎng)
                int temp = DFS_Perimeter(arr, i, j);
                if (temp > MaxLand)
                {
                    MaxLand = temp;
                }

            }
        }
    }

    //cout << "島嶼個(gè)數(shù):" << count << endl;
    //cout << "最大島嶼面積:" << MaxLand << endl;

    cout << "最大島嶼周長(zhǎng):" << MaxLand << endl;

    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容