提供的代碼實現了經典的迷宮最短路徑查找:
int mg[10][10] 迷宮地圖(1=牆,0=路),結構體 Qu 模擬隊列節點(座標 i,j + 前驅索引 pre)。mg[1][1]=-1 表示已訪問。mg[ni][nj]==0 則入隊、標記 -1、記錄前驅。print() 通過前驅索引回溯路徑並輸出。// 方向向量:上、右、下、左
int di[4] = {-1, 0, 1, 0};
int dj[4] = {0, 1, 0, -1};
for (int k = 0; k < 4; k++) {
int ni = q[front].i + di[k];
int nj = q[front].j + dj[k];
if (mg[ni][nj] == 0) { // 可走且未訪問
rear++;
q[rear].i = ni;
q[rear].j = nj;
q[rear].pre = front; // 記錄前驅,用於回溯
mg[ni][nj] = -1; // 標記已訪問
}
}
| 錯誤現象 | 可能原因 | 修復建議 |
|---|---|---|
| fatal error C1004: unexpected end of file found | 大括號 {} 不匹配,常見於 if/while/for 缺少右大括號 | 使用 IDE 自動縮進/匹配高亮檢查,確保每層邏輯閉合 |
| struct/class 定義後缺少分號 | struct Qu { ... } 末尾漏寫 ; | 結構體/類定義結尾必須加分號 |
| #if 無對應 #endif | 條件編譯塊未閉合 | 補全 #endif |
| 預編譯頭文件錯誤 | VS 預設要求 #include "stdafx.h" 在第一行 | 添加 #include "stdafx.h" 或項目屬性 → C/C++ → 預編譯標頭 → "不使用預編譯標頭" |
| main 返回類型非 int | void main() 不標準 | 改為 int main() { ... return 0; } |
| 數組越界風險 | 未檢查 ni, nj 是否在 [0,9] 範圍內 | 入隊前加邊界判斷 ni>=0 && ni<10 && nj>=0 && nj<10 |
std::queue<Node> 替代手寫數組隊列,代碼更簡潔安全。vector<vector<int>> 動態存儲迷宮,支持任意尺寸。vector 再反轉輸出。該代碼正確實現了 BFS 迷宮尋路核心邏輯。編譯失敗多源于 **C++ 基礎語法細節(括號、分號、main簽名、預編譯頭)**,而非算法邏輯。建議開啟編譯器警告等級(/Wall 或 -Wall),善用 IDE 代碼折疊/匹配功能快速定位語法錯誤。