iT邦幫忙

2026 iThome 鐵人賽

DAY 6
1
Software Development

快樂演算法系列 第 6

世界上最遠的距離就是你看得到YOLO看不到 & 417 v5

  • 分享至 

  • xImage
  •  

visited[x][y] = true; 不是「先假裝走過」,而是:
DFS 一進入 (x,y) 這格,就代表你現在已經走到這格了,所以立刻標記 true。
最小例子:
dfs(height, 0, 0, pacific);
一呼叫這行,就表示:
我現在已經到 (0,0) 了。
所以進到 dfs() 第一件事就是:
visited[0][0] = true;
至於你問「怎麼沒型別」,因為 visited 早就在參數這裡定義型別了:
vector<vector>& visited
所以裡面這行只是修改既有陣列內容,不是重新宣告變數。
你可以記成:
呼叫 dfs(x,y)
= 已經走到 (x,y)
→ 馬上 visited[x][y] = true
→ 再看四周下一步能不能走
不是「還沒開始走」,而是呼叫 DFS 的那一刻就已經抵達這格。
2.
vector<vector> pacificAtlantic(vector<vector>& height) {

拆開看:

vector<vector> // 回傳很多個 [x, y] 座標
pacificAtlantic // 函式名稱
(vector<vector>& height) // 輸入高度地圖

兩個海真正分開記在:

pacific
atlantic

最後才做:

pacific[x][y] && atlantic[x][y]

兩邊都能到的座標才放進答案。

int maxX, maxY; 是宣告變數;maxX = height.size(); 是把真正的值放進去。

最小例子:

int maxX; // 先說:我要一個整數變數叫 maxX
maxX = 5; // 再把 5 存進 maxX

這題也是一樣:

int maxX, maxY; // 先宣告

之後拿到 height 才知道大小:

maxX = height.size(); // 有幾列
maxY = height[0].size(); // 有幾欄

所以不是重複,而是:

先建立變數 → 後面再賦值。

class 建立
→ 先準備 maxX、maxY

pacificAtlantic 收到 height
→ 現在才知道 Grid 多大
→ maxX = height.size()
→ maxY = height[0].size()

dfs()
→ 可以直接使用 maxX、maxY

5.false 不是在比位置、也不是在檢查邊界;它只是把整張「Ocean 可達紀錄表」先初始化成「全部都還沒走到」。

6.dfs(height, 0, y, pacific);
dfs(height, maxX - 1, y, atlantic);

是在設定「上邊」和「下邊」的 DFS 起點。


上一篇
流血日 星巴克沒開:“( &417 v4
下一篇
Visual Prompt preprocessing & 417 v6
系列文
快樂演算法13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
AndyAWD
iT邦新手 1 級 ‧ 2026-08-25 23:03:53

我只知道 AI 的 YOLO,看來我該讓腎了

我要留言

立即登入留言