計算湖泊(島嶼)數量問題

2021-10-09 10:48:57 字數 1006 閱讀 2514

題目:輸入x、y,生成乙個二維的網格,網格中全部由h和s組成,h代表陸地,s代表湖泊。每乙個湖泊跟相鄰的湖泊組成大湖泊,大湖泊總是被陸地包圍。要求計算該二維網格內大湖泊的數量。

思路:s與其相鄰的s共同組成大湖泊,因此遍歷時相鄰的s只計入一次。演算法採用遞迴的思路,用座標的形式,記錄大湖泊內所有的座標。

#include

"stdafx.h"

#include

#include

#include

using

namespace std;

string s; 用來儲存大湖泊的所有座標

void

collect_s

(char

** map,

int i,

int j ,

int m ,

int n)

遞迴將湖泊周圍的湖泊全部加入字串s

if(i >0)

}if(j >0)

}if(i < m -1)

}if(j < n -1)

}}intmain()

二維陣列生成

for(int i =

0; i < m; i++

) cout << endl;

} 利用隨機數在h/s中賦值

int count =0;

for(

int i =

0; i < m; i++)}

} 遍歷二維陣列,如果s的座標不在字串裡,則湖泊數加一,同時執行map函式將所有相鄰s的座標新增進字串中

cout << count;

system

("pause");

return0;

}

執行結果:

計算島嶼的數量

給定乙個由 1 陸地 和 0 水 組成的的二維網格,計算島嶼的數量。乙個島被水包圍,並且它是通過水平方向或垂直方向上相鄰的陸地連線而成的。你可以假設網格的四個邊均被水包圍。例 1 輸入 4 5 11110 11010 11000 00000 輸出 1例2 輸入 4 5 11000 11000 001...

200 島嶼數量

複雜度分析 時間複雜度 o m n 其中 m 和 n 分別為行數和列數。空間複雜度 最壞情況下為 o m n 此時整個網格均為陸地,深度優先搜尋的深度達到m n。class solution int numislands vector grid int cnt 0 for int i 0 i gri...

200 島嶼數量

leetcode 200.島嶼數量 島嶼另一種型別 求周長 leetcoed 463.島嶼的周長 廣度優先遍歷 bfs 深度優先遍歷 dfs 2.1 dfs 就是遇到乙個 1 遞迴下去繼續找 1 四周沒有 1 之後,逐層返回到上一層找四周剩餘的 1 本題不需要回溯 直接把 訪問過的標記即可 廣度優先...