給定乙個包含了一些0和1的非空二維陣列grid 。
乙個島嶼是由一些相鄰的1(代表土地)構成的組合,這裡的「相鄰」要求兩個1必須在水平或者豎直方向上相鄰。你可以假設grid的四個邊緣都被0(代表水)包圍著。
找到給定的二維陣列中最大的島嶼面積。(如果沒有島嶼,則返回面積為0。)
示例 1:
[[0,0,1,0,0,0,0,1,0,0,0,0,0],對於上面這個給定矩陣應返回 6。注意答案不應該是 11 ,因為島嶼只能包含水平或垂直的四個方向的 1 。[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]]
示例 2:
[[0,0,0,0,0,0,0,0]]對於上面這個給定的矩陣, 返回 0。
注意: 給定的矩陣grid 的長度和寬度都不超過 50。
dfs解決
這題無論使用dfs還是bfs都很好解決,dfs就是沿著乙個方向一直走下去,直到不滿足條件為止(要麼走出grid的邊緣,要麼當前位置是0),就像下面這樣,
**如下
public
intmaxareaofisland
(int
grid)
return maxarea;
}public
intdfs
(int
grid,
int i,
int j)
return0;
}
bfs解決bfs我們可以使用乙個佇列來實現,他的實現原理就是如果乙個位置是1,我們就把他上下左右為1的點的座標全部加入到佇列中,然後改變當前位置的座標為0,防止重複計算。加入佇列之後再乙個個出隊,然後再以出隊的那個點重複上面的操作……,直到隊列為空為止。就像下面這樣,假如遍歷到紅色的1,我們就把他上下左右為1的位置座標全部加入到佇列中。
//分別表示右,左,下,上,四個方向
int[
] dirs =,,
,};int res =1;
while
(!queue.
isempty()
) grid[x]
[y]=0;
res++
; queue.
offer
(new
int)
;}}return res;
}總結如果對圖的遍歷比較了解的話,這兩種方式很容易想到,乙個是沿著乙個方向一直走下去,乙個就像波浪一樣,沿著乙個點然後往四周一圈一圈的發散。
C DLL匯出的兩種方式和鏈結的兩種方式
第一種 匯出方式 extern c declspec dllexport int plus int x,int y extern c declspec dllexport int sub int x,int y extern c declspec dllexport int mul int x,in...
BFS和DFS兩種方式實現二叉樹的層序遍歷
二叉樹的前序遍歷 二叉樹的中序遍歷 二叉樹的後序遍歷 二叉樹的層序遍歷 二叉樹的前序 中序 後序 層序遍歷 解法完整版 三 總結 給你乙個二叉樹,請你返回其按層序遍歷得到的節點值。即逐層地,從左到右訪問所有節點 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返...
java兩種方式實現執行緒求奇數 偶數
package com.ljl.org.test4 demo interview author jilongliang date 2013 4 17 分別使用runnable介面和thread類程式設計實 編寫一應用程式建立兩個執行緒乙個執行緒列印輸出1 1000之間所有的奇數 odd number...