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

C# 迷宮求解器:Windows Forms 圖形化實作與演算法解析

     編輯:關於C語言

專案概述

本文展示一個使用 C# 與 Windows Forms 開發的迷宮求解應用程式,採用深度優先搜尋(DFS)演算法搭配堆疊回溯機制,並提供豐富的視覺化介面讓使用者觀察尋路過程。程式包含手動單步執行、自動執行、重置與資訊檢視等功能,適合作為演算法教學或遊戲開發的參考範例。

核心架構設計

迷宮資料結構

迷宮以二維布林陣列表示,true 代表可通行路徑,false 代表牆壁。建構子預設載入一個 7×7 的測試迷宮,起點設為 (0,0),終點為 (6,6)。

CMaze 核心類別

CMaze 封裝所有尋路邏輯:

  • DrawBox:繪製迷宮牆壁與通路
  • DrawPath:繪製已走過的路徑(藍色)
  • DrawNextPath:繪製可選方向(黃色)
  • Step():單步執行一次移動,返回 1 表示到達終點
  • Run():自動執行至終點
  • Reset():重置迷宮狀態
  • StackCount / StepCount:提供堆疊深度與步數統計

使用者介面與互動

主視窗 Form1 包含以下控制項:

控制項功能
Run自動尋路至終點
Step單步執行,適合觀察演算法細節
Auto動畫模式,每 500ms 執行一步並重繪
Reset重置迷宮至初始狀態
Info顯示迷宮結構、堆疊狀態與步數
About顯示作者資訊

右側面板提供圖例說明:綠色=通路、黃色=可選方向、藍色=已走路徑、紅色=牆壁。

關鍵程式碼片段

迷宮初始化

bool[,] _mg = new bool[,]{
    {true,false,false,true,false,false,false},
    {true,true,true,true,true,true,true},
    {false,false,true,false,true,false,true},
    {false,false,true,false,true,false,false},
    {false,true,true,false,true,false,false},
    {true,true,false,false,true,true,false},
    {false,false,false,false,false,true,true}
};
mymaze = new CMaze(_mg, new Point(0,0), new Point(6,6));

繪圖事件處理

private void Form1_Paint(object sender, PaintEventArgs e)
{
    mymaze.DrawBox(e.Graphics);
    mymaze.DrawPath(e.Graphics);
    mymaze.DrawNextPath(e.Graphics);
}

自動執行動畫迴圈

private void button3_Click(object sender, EventArgs e)
{
    mymaze.Reset();
    while (mymaze.Step() != 1)
    {
        this.Refresh();
        Thread.Sleep(500);
    }
    MessageBox.Show("已到出口");
}

演算法原理解析

程式採用深度優先搜尋(DFS)搭配堆疊回溯:

  1. 從起點開始,將當前位置推入堆疊
  2. 檢查四個方向(上下左右)是否可通行且未造訪
  3. 若有可走方向,選擇一個移動並標記為已走路徑
  4. 若陷入死胡同(無可走方向),從堆疊彈出回溯至上一個分叉點
  5. 重複直到到達終點或堆疊為空(無解)

視覺化顏色編碼讓觀察者能直觀理解演算法的探索與回溯過程。

擴充建議

  • 支援從檔案載入自訂迷宮地圖
  • 加入廣度優先搜尋(BFS)與 A* 演算法對比
  • 實作迷宮自動生成演算法(如 Prim、Kruskal)
  • 增加步數統計圖表與效能分析
  • 支援多執行緒非阻塞動畫播放

總結

此專案展示了 C# 在圖形化演算法視覺化上的優勢,結合 Windows Forms 的 GDI+ 繪圖與事件驅動模型,將抽象的資料結構與演算法轉化為直觀的動態演示。程式碼結構清晰,關注點分離良好,適合作為教學示範或進階功能的基礎框架。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved