- 地圖就是二維陣列:
a[i][j] 第一個中括號挑橫排(列)、第二個挑直排(行),索引從 0 開始;數字地圖用巢狀 vector,字元地圖用 vector<string>。
inside 永遠在存取陣列之前:&& 短路求值保證出界時不會讀到陣列外面。
- 方向打成表:
dr[]/dc[] 讓「往方向 d 走一步」變成固定兩行;自己排就順時針,右轉 +1、左轉 +3、迴轉 +2;題目給編號就照題目排。
- 走動的節奏:先算下一格、檢查、再移動。
- 射線=把那三步放進
while 走到停;標記表是跟地圖一樣大的 bool 表,記錄走過/有東西。
- 鄰格=方向表跑一圈、每個都過
inside;範圍=雙層迴圈加距離條件,地圖小可以整張掃。
- 「同時發生」=讀舊表、寫新表、回合結束交換;或把要套用的變更先記下來、判完再一起做。
- 平移=枚舉左上角、逐格對應 (top+i,\ left+j);不規則形狀先打成位移表。
- 旋轉=一條座標公式加一張新表(長寬對調);還原=從最後一個操作倒著做反操作。
- 實作題的寫法:規則排好再翻譯、零件先寫、一個功能一個函式、交前自造角落與全牆測資。