public
class
numislands_200,,
,}; system.out.
println
(numislands
(grid));
}/** 網格 */
private
static
char
grid;
/** 網格行數 */
private
static
int row;
/** 網格列數 */
private
static
int col;
/** 標記陣列:標記格仔是否訪問過 */
private
static
boolean
marked;
/** 方向陣列:上下左右 */
private
static
final
int[
] directions =,,
,};/** 佇列 */
private
static linkedlist
queue =
newlinkedlist
<
>()
;/**
* 獲取島嶼的數量
* @param grid 網格
* @return 網格中島嶼的數量
*/public
static
intnumislands
(char
grid)
col = grid[0]
.length;
// 使用成員變數,避免來回傳遞陣列
numislands_200.grid = grid;
// 初始化訪問標記陣列
marked =
newboolean
[row]
[col]
;// 島嶼數量
int res =0;
// 遍歷網格陣列
for(
int i =
0; i < row; i++)}
}return res;
}/**
* 廣度優先搜尋
* @param i 網格的行座標
* @param j 網格的列座標
*/public
static
void
bfs(
int i,
int j)}}
}/**
* 深度優先搜尋
* @param i 網格的行座標
* @param j 網格的列座標
*/private
static
void
dfs(
int i,
int j)}}
/** * 判斷座標 (x, y) 是否在網格內
* @param x 行座標
* @param y 列座標
* @return true 在網格內
*/public
static
boolean
isinarea
(int x,
int y)
}
200 島嶼數量 BFS DFS實現
難度 中等 2020 4 20每日一題打卡 題目描述 解題思路 感覺類似的題出國好多遍,比如感染橘子,第乙個想到的還是bfs 經典bfs的模板啦,踩了乙個坑就是關於標記已經訪問過的時機。如果是出隊的時候才標記訪問過,會增加很多重複的遍歷次數,在資料量大的時候會超時。正確的應該是在入隊的時候就標記已經...
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 本題不需要回溯 直接把 訪問過的標記即可 廣度優先...