用“擴散”法對迷宮求解

    上計算機網絡時學了“擴散”的方法。感覺用在迷宮求解很合適。

    先把地圖初始化爲二維數組,數組裏面是一個類的一個對象。這個類有以下功能:
每一個對象有一個int型變量,盛放這個元素到初始點的最短距離。從初始點開始(此時距離爲0),判斷周圍的對象是不是已經被“擴散”。如果沒有,相鄰對象距離加1,並把新對象座標放到一個鏈表;如果相鄰的已經被擴散,就不對它做任何改變;如果不能通過的位置,就不對這個位置處理。
class position
{
public:
  bool canGoThrow;
  bool isSpreaded;
  int lenth;
};
例如地圖爲20×20的。則開始時就這樣:position a[20][20];(其實這個類很簡單,直接用int型二維數組就行)。
    例如:先從初始點開始向四周擴散到四個相鄰的對象,每個對象都在一個鏈表中記錄,他們的距離值爲1.下一步就是擴散距離爲1的所有相鄰對象。它們的距離爲2.把每一個距離爲2的都記錄一個鏈表。擴散完之後,釋放存儲距離爲1的鏈表。然後根據距離爲2的鏈表,擴散出距離爲3的鏈表,並相應設置其距離。直到擴散到目標位置或者不存在距離更高的位置(不能到達目的地)。
    目標位置的距離就是最小距離。當要找路線是只需要根據這個點到出發點的距離,倒着找回去就可以了。
    下面是一個迷宮結果(*代表最佳路徑,#代表不可通過的,空白表示可以走的,@起始位置,$目標位置):
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章