417 太平洋大西洋水流問題

2021-10-18 20:45:21 字數 2569 閱讀 4725

典型的搜尋演算法,不過這次搜尋的目標有兩個,到達太平洋和大西洋。需要寫兩個dfs遞迴函式。

演算法流程

遍歷圖中所有點,呼叫深度遞迴函式。

如果該點既能到達太平洋又能夠到達大西洋。那麼將這個點加入結果集。

返回結果集合

這裡的遞迴算是深度優先遍歷的模板步驟吧。不過這裡標記是否訪問用了乙個小技巧,修改原陣列,因為河流高度不能為0,所以將訪問過的點記錄為-1,表示已經訪問。

遞迴流程

邊界判定:判定越界以及是否訪問

返回條件:點處於邊界

遞迴工作:搜尋高度比目前高度低的鄰近節點,呼叫dfs。有乙個點能夠到達邊界就返回true。

返回結果:如果自己或者四周任意節點能夠到達邊界,返回true。

演算法複雜度

// 其實就是求可以從高流到低的流向四方的河流

// 其實就是求可以從高流到低的流向四方的河流

class

solution

;public list

>

pacificatlantic

(int

matrix)}}

return res;

}// 判定(x,y)能否到達太平洋

private

boolean

dfsp

(int x,

int y)

} matrix[x]

[y]= temp;

return res;

}// 判定(x,y)能否到達大西洋

private

boolean

dfsa

(int x,

int y)

} matrix[x]

[y]= temp;

return res;

}// 判定邊界

private

boolean

check

(int x,

int y)

}

不過這裡還有另外一種解法,那就是從邊界往裡面灌水。以前是當前點出發,判斷它是否能夠到達某一邊界。這裡恰好相反,是從邊界點出發,逆向推導能夠到達邊界的點。

演算法流程

分別對左右兩側呼叫太平洋遞迴函式rea

chpa

cifi

c(x,

y)

reachpacific(x, y)

reachp

acif

ic(x

,y)和大西洋遞迴函式rea

chat

lant

ic(x

,y

)reachatlantic(x, y)

reacha

tlan

tic(

x,y)

。這兩個遞迴函式會從邊界出發,遍歷一切它們可以抵達的比他們高的點。並且將遍歷過的節點標記為true。

分別對上下兩側呼叫rea

chpa

cifi

c(x,

y)

reachpacific(x, y)

reachp

acif

ic(x

,y)和rea

chat

lant

ic(x

,y

)reachatlantic(x, y)

reacha

tlan

tic(

x,y)

遍歷圖,將同時能夠到達太平洋和大西洋的點記錄。

遞迴工作

邊界判定:判定越界以及是否訪問

返回條件:將當前點標記為訪問過

遞迴工作:搜尋高度比目前高度高的鄰近節點,遞迴呼叫dfs。

演算法複雜度

// 其實就是求可以從高流到低的流向四方的河流

class

solution

;boolean

reacha;

boolean

reachp;

public list

>

pacificatlantic

(int

matrix)

for(

int i =

0; i < matrix[0]

.length; i++

)for

(int i =

0; i < matrix.length; i++)}

}return res;

}private

void

reachpacific

(int x,

int y)

}private

void

reachatlantic

(int x,

int y)

}private

boolean

check

(int x,

int y)

}

417太平洋大西洋水流問題

採用逆向思維,從陣列的最外邊開始遍歷,向陣列中心開始遍歷,如果太平洋和大西洋都被訪問過,那麼當前節點就就符合題目條件。class solution,bool iseffective int x,int y void dfs int x,int y,int pre,vector bool shuzu,...

417 太平洋大西洋水流問題

給定乙個 m x n 的非負整數矩陣來表示一片大陸上各個單元格的高度。太平洋 處於大陸的左邊界和上邊界,而 大西洋 處於大陸的右邊界和下邊界。規定水流只能按照上 下 左 右四個方向流動,且只能從高到低或者在同等高度上流動。請找出那些水流既可以流動到 太平洋 又能流動到 大西洋 的陸地單元的座標。目前...

417 太平洋大西洋水流問題 Medium

三 總結 給定乙個m x n的非負整數矩陣來表示一片大陸上各個單元格的高度。太平洋 處於大陸的左邊界和上邊界,而 大西洋 處於大陸的右邊界和下邊界。規定水流只能按照上 下 左 右四個方向流動,且只能從高到低或者在同等高度上流動。請找出那些水流既可以流動到 太平洋 又能流動到 大西洋 的陸地單元的座標...