島嶼問題(DFS)

2021-10-03 21:54:07 字數 1265 閱讀 4961

題目:(方格搜尋類題目均可使用dfs演算法)

695.給定乙個包含了一些 0 和 1的非空二維陣列 grid , 乙個 島嶼 是由四個方向 (水平或垂直) 的 1 (代表土地) 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。

找到給定的二維陣列中最大的島嶼面積。(如果沒有島嶼,則返回面積為0。)

示例 1:

[[0,0,1,0,0,0,0,1,0,0,0,0,0],

[0,0,0,0,0,0,0,1,1,1,0,0,0],

[0,1,1,0,1,0,0,0,0,0,0,0,0],

[0,1,0,0,1,1,0,0,1,0,1,0,0],

[0,1,0,0,1,1,0,0,1,1,1,0,0],

[0,0,0,0,0,0,0,0,0,0,1,0,0],

[0,0,0,0,0,0,0,1,1,1,0,0,0],

[0,0,0,0,0,0,0,1,1,0,0,0,0]]

對於上面這個給定矩陣應返回 6。注意答案不應該是11,因為島嶼只能包含水平或垂直的四個方向的『1』。

解題步驟:

1.此題要用深度搜尋進行處理。每個島嶼只需要搜尋一遍,當搜尋完之後,將該島嶼的值設為0。

2.要用遞迴的方式,將每個島嶼面積計算出來,選出最大的。

**:

class

solution}}

return ans;

}//dfs方法。遞迴找出乙個區域的島嶼面積。

public

int dfs (

int i,

int j,

int grid[

])grid[i]

[j]=0;

int num=1;

num +=

dfs(i+

1,j,grid)

; num +=

dfs(i-

1,j,grid)

; num +=

dfs(i,j+

1,grid)

; num +=

dfs(i,j-

1,grid)

;return num;

}}

深度優先遍歷圖的方法是,從圖中某頂點v出發:

(1)訪問頂點v;

(2)依次從v的未被訪問的鄰接點出發,對圖進行深度優先遍歷;直至圖中和v有路徑相通的頂點都被訪問;

(3)若此時圖中尚有頂點未被訪問,則從乙個未被訪問的頂點出發,重新進行深度優先遍歷,直到圖中所有頂點均被訪問過為止。

leetcode DFS 島嶼數量 樸素DFS

看傳送門裡的思路好了,這裡大體一致,只不過選擇了dfs作為解法而已。dfs的解法和bfs基本上一模一樣,只不過使用了stack作為資料結構。當然你可以編寫更簡單的遞迴形式,利用os的call stack,不過那樣做的缺點就是容易堆疊溢位。includeusing namespace std vect...

島嶼數量 200 DFS

題目 給定 1 s 土地 和 0 s 水 的2d網格圖,計算島嶼的數量。島被水包圍,通過水平或垂直連線相鄰的土地而形成。您可以假設網格的所有四個邊都被水包圍。分析 截至條件 如何判定這是乙個島嶼grid i 1 j 0 grid i j 1 0的時候 確定這是乙個島嶼,此時在儲存島嶼數量的變數上加1...

百煉 12558 島嶼周長(dfs)

描述 用乙個n m的二維陣列表示地圖,1表示陸地,0代表海水,每一格都表示乙個1 1的區域。地圖中的格仔只能橫向或者縱向連線 不能對角連線 連線在一起的陸地稱作島嶼,同時整個地圖都被海水圍繞。假設給出的地圖中只會有乙個島嶼,並且島嶼中不會有湖 即不會有水被陸地包圍的情況出現 請判斷所給定的二維地圖中...