題目:輸入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 本題不需要回溯 直接把 訪問過的標記即可 廣度優先...