#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;
}
島嶼問(wèn)題
?著作權(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ù)。
【社區(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)容
- 島嶼遍歷的考慮要點(diǎn):(1) 設(shè)置返回邊界,可以先污染后治理(2) 防止來(lái)回橫跳,添加狀態(tài)"2",代表原來(lái)"1"已經(jīng)...
- 問(wèn)題 輸入是以1和0表示的一張地圖,其中1代表陸地,0代表海洋。島嶼是1上下左右相連通的區(qū)域。(不包括對(duì)角線)輸出...
- 寫(xiě)在前:參考這里[https://leetcode-cn.com/problems/number-of-islan...