本單元語法速查表
| 語法 | 用途 | 範例 |
|---|---|---|
vector<vector<int>> a(R, vector<int>(C)); |
宣告 R \times C 的數字地圖,全部 0 | cin >> a[i][j]; |
vector<string> grid(H); cin >> grid[i]; |
讀入字元地圖,一次一整列 | grid[i][j] == '#' |
bool inside(int r, int c) |
邊界判斷,永遠放在存取陣列之前 | return 0 <= r && r < H && 0 <= c && c < W; |
const int dr[4] = {-1, 0, 1, 0}; const int dc[4] = {0, 1, 0, -1}; |
方向表(上右下左,順時針) | nr = r + dr[d]; nc = c + dc[d]; |
d = (d + 1) % 4; |
右轉;左轉 + 3、迴轉 + 2 |
表要順時針排才成立 |
(dir - prevDir + 4) % 4 |
由前後方向判斷轉向:1 右轉、3 左轉、2 迴轉 | 路徑偵測 |
while (true) { nr = r + dr[d]; ... if (!inside(nr, nc) || grid[nr][nc] == '#') break; r = nr; c = nc; } |
射線:沿一個方向走到停 | 魔王迷宮 |
vector<vector<bool>> visited(H, vector<bool>(W, false)); |
跟地圖一樣大的標記表 | bomb、visited、removed |
for (int d = 0; d < 4; d++) { ... if (!inside(nr, nc)) continue; ... } |
枚舉四鄰格(改 8 是八鄰格) | 機器人的路徑 |
abs(i - r) + abs(j - c) <= t |
曼哈頓距離範圍 | 特殊位置、電子畫布 |
vector<vector<int>> next = a; ... a.swap(next); |
同步更新:讀舊表寫新表 | 人口遷移 |
for (top = 0; top + s <= n; top++) |
枚舉子矩陣左上角(平移) | 矩陣總和 |
B[j][R - 1 - i] = A[i][j]; |
順時針轉 90^\circ(新圖 C \times R) | 矩陣轉換的反操作是逆時針 |
reverse(A.begin(), A.end()); |
上下翻轉 | 再翻一次就變回原樣 |