Ocean 四邊 題目已知這些格子直接碰到海,所以從這裡反向開始
visited=true 已經進到這格,立刻記錄避免繞回來
inside一定先確認座標合法,否則後面直接讀 visited[nx][ny] 可能越界
!visited走過就不用再算高度,省事
height[nx][ny] >= height[x][y]最後才判斷能不能「往高處爬」
dfs(nx,ny) 三個條件都過,才正式走去下一格
讀 visited[nx][ny]就是:去看下一個座標 (nx, ny) 在 visited 裡是 true 還是 false。
例如 Grid 只有 3×3:
合法 index:0, 1, 2
如果你現在算出:nx = -1;ny = 2;
那visited[nx][ny]就等於想讀:visited[-1][2]
但 -1 根本不是合法位置,所以就是 out of bounds(超出陣列範圍/越界),可能直接 Runtime Error。
所以一定先:inside確認 (nx, ny) 還在 Grid 裡,才能安全去看:
visited[nx][ny]
height[nx][ny]
3.!visited[nx][ny] 為什麼還要出現?
因為 inside 只回答:這格存在嗎?
但不回答:這格以前走過沒?
例如:inside = true visited = true
代表:這格合法,但已經處理過了。 那就不用再算高度、也不用再 DFS 一次。
就是已算過
合法 → 沒拜訪過 → 下一格高度 ≥ 現在 → 往上走。
if (inside &&
!visited[nx][ny] &&
height[nx][ny] >= height[x][y])