沉島思想 DFS思想

2021-10-03 22:02:23 字數 1480 閱讀 7067

leetcode695題

給定乙個包含了一些 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的土地的數量和就是最大面積。

需要注意的是:

要求出所有相連的1的土地的max最大值

為了避免重複訪問,把搜尋過的1設定為0,這就是沉島思想。

對每乙個為1的土地,從上下左右4個方向搜尋值也為1的土地,以及與這些土地相連的土地。

1.用兩個陣列來實現四個方向的搜尋:

d1=;

d2=;

int x=i+d1[k], y=j+d2[k]; (k=0,1,2,3)

area+=dfs(grid,x,y)

2.也可直接進行加減

area+=dfs(grid, i+1, j );

area+=dfs(grid, i-1, j );

area+=dfs(grid , i, j+1 );

area+=dfs(grid, i, j-1 );

public

static

intmaxareaofisland

(int

grid)

}return max;

}public

static

intdfs

(int

grid,

int i,

int j)

int area=1;

grid[i]

[j]=0;

//避免重複訪問

int d1=

;//四個方向

int d2=

;for

(int k=

0;k<

4;k++

)return area;

}

dfs好厲害,撒*,:.( ̄▽ ̄)/:. 。

力扣 200島嶼數量 (深度優先遍歷 沉島思想)

給你乙個由 1 陸地 和 0 水 組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向和 或豎直方向上相鄰的陸地連線形成。此外,你可以假設該網格的四條邊均被水包圍。示例 1 輸入 11110 11010 11000 00000 輸出 1示例 2 輸入 11000 ...

思想啊思想

前幾天和零敏同學交流的時候她提到想把進度提的快一點,想學快點,多學點。想法可以理解,行動不支援。這是我當時的第一想法,因為學習從來就不是一蹴而就的事情,需要漸漸的滲透。當時我表達的意思是第一年主要掌握思想不可急躁。問題來了 什麼思想說說唄 靈敏同學原話 頓時我傻了,什麼思想?我知道有,但卻說不出來,...

思想啊思想

前幾天和零敏同學交流的時候她提到想把進度提的快一點,想學快點,多學點。想法可以理解,行動不支援。這是我當時的第一想法,因為學習從來就不是一蹴而就的事情,需要漸漸的滲透。當時我表達的意思是第一年主要掌握思想不可急躁。問題來了 什麼思想說說唄 靈敏同學原話 頓時我傻了,什麼思想?我知道有,但卻說不出來,...