本文展示一個使用 C# 與 Windows Forms 開發的迷宮求解應用程式,採用深度優先搜尋(DFS)演算法搭配堆疊回溯機制,並提供豐富的視覺化介面讓使用者觀察尋路過程。程式包含手動單步執行、自動執行、重置與資訊檢視等功能,適合作為演算法教學或遊戲開發的參考範例。
迷宮以二維布林陣列表示,true 代表可通行路徑,false 代表牆壁。建構子預設載入一個 7×7 的測試迷宮,起點設為 (0,0),終點為 (6,6)。
CMaze 封裝所有尋路邏輯:
主視窗 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)搭配堆疊回溯:
視覺化顏色編碼讓觀察者能直觀理解演算法的探索與回溯過程。
此專案展示了 C# 在圖形化演算法視覺化上的優勢,結合 Windows Forms 的 GDI+ 繪圖與事件驅動模型,將抽象的資料結構與演算法轉化為直觀的動態演示。程式碼結構清晰,關注點分離良好,適合作為教學示範或進階功能的基礎框架。