1.void = 沒有回傳值。
這個 dfs() 只是去修改 visited,不需要 return 一個數字或陣列,所以用 void。
它有做事,但沒有回傳東西。
2.visited[x][y] = true; 要先存,是因為一進到這格就代表已經走到了,先標記才能避免後面又繞回這格造成重複 DFS。
條件 在檢查什麼 最小例子
inside 下一格有沒有超出 Grid nx = -1 → 出界,不能用
!visited[nx][ny] 下一格以前有沒有走過 走過 → 不要再走
height[nx][ny] >= height[x][y] 高度能不能反向往上爬 現在 2、下一格 3 → 可
所以順序就是:① 存在嗎?② 走過嗎?③ 高度夠嗎?④ 都符合 → DFS
不是「先檢查邊界一次,再檢查當下那格一次」。
void dfs(vector<vector>& height,
int x,
int y,
vector<vector>& visited)
參數 用途
height 題目原本的高度地圖,例如 1,2,3
visited 記錄這個 Ocean 已經走過哪些格子
vector<vector>& visited
DFS 改:visited[x][y] = true;
外面的 pacific / atlantic 才會真的被更新。
6.inside 自建的 bool 變數。
bool inside = nx >= 0 && nx < maxX && ny >= 0 && ny < maxY;
下一個座標是否仍在 Grid 裡