首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言迷宮回溯算法:手動輸入死循環與路徑顯示問題修復

     編輯:C 語言問答

迷宮問題三大Bug修復

Bug 1:手動輸入模式無法正常讀取數據

原因:scanf("%d", &maze[x][y]) 讀取整數,但迷宮數據為字符 '0' '1',格式不匹配導致緩衝區殘留,後續讀取失敗。

修復:改用字符讀取:


char ch;
scanf(" %c", &ch);  // 空格跳過空白字符
maze[x][y] = ch;

Bug 2:重試循環無法退出

原因:外層 while(d==1),內部 scanf("%d", &d) 讀取重試選擇,但若輸入非數字,d 不更新,緩衝區殘留導致無限循環。

修復:輸入驗證 + 緩衝區清理:


int retry;
do {
    printf("重試? 1/0: ");
    while (scanf("%d", &retry) != 1 || (retry != 0 && retry != 1)) {
        printf("輸入 0 或 1: ");
        while (getchar() != '\n');  // 清理緩衝區
    }
    d = retry;
} while (d == 1);

Bug 3:路徑以連線顯示 (VC 圖形)

控制台無法畫線。方案:

  • 方案 A:用字符模擬連線 (如 ─ │ ┌ ┐ └ ┘ ├ ┤ ┬ ┴ ┼ 盒繪字符)
  • 方案 B:Windows API SetConsoleCursorPosition + 彩色字符標記路徑
  • 方案 C:遷移至圖形庫 (SDL2、EasyX、Qt) 繼真正畫線

EasyX 圖形庫快速繪製路徑


#include 
#include 
// ... 迷宮邏輯 ...
initgraph(640, 480);
setlinecolor(RED);
setlinestyle(PS_SOLID, 3);
for (int i = 0; i < pathLen - 1; i++) {
    line(path[i].y*CELL_SIZE + CELL_SIZE/2, path[i].x*CELL_SIZE + CELL_SIZE/2,
         path[i+1].y*CELL_SIZE + CELL_SIZE/2, path[i+1].x*CELL_SIZE + CELL_SIZE/2);
}
getch(); closegraph();

核心算法優化

  • 方向數組優化:int dx[4]={0,1,0,-1}, dy[4]={1,0,-1,0} (右下左上)
  • 訪問標記用獨立 visited 數組,不破壞原迷宮
  • 路徑記錄用堆疊或遞歸回溯構建
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved