語法書 / AA 競程語法書 下冊 / 第十三單元 / 本單元語法速查表

本單元語法速查表

語法 用途 範例
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)); 跟地圖一樣大的標記表 bombvisitedremoved
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()); 上下翻轉 再翻一次就變回原樣