200 島嶼數量(BFS DFS)

2022-05-03 10:01:49 字數 1649 閱讀 5463

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