我們知道棧的特點是:後進先出
(first in last out);也就是說只能在棧的尾部進
行壓棧和出棧,而且出棧的時候只能從最後乙個資料開始。
所以我們利用棧這個特點,來實現這個迷宮。在這之中我們要採用「回溯」的方法去處理當遇到路徑不通的情況。
原理:每找到乙個通路,就將這個資料壓棧,這樣當前位置的上乙個位置就位於棧的頂部,假如當前位置的上下左右都找不到通路的時候,就開始回溯,也就是開始從來的路往回走,而之前走過的路都存在棧裡面,所以只需要乙個乙個的pop就能依次往回退,每退一次,就尋找上下左右有沒有通路,如果找到通路就繼續往下走,並壓棧,直到走出整個迷宮。
#define _crt_secure_no_warnings 1
#include"mazemap.h"
#includevoid test()
; cout <
#includeusing namespace std;
struct pos
;void getmaze(int* a, int n)
else
}} fclose(fout);
}bool checkisaccess(int *a, int n, const pos& next)//檢查當前的路徑是否通行
else }
bool searchpath(int* a, int n, pos entry, stack& paths)
pos next = cur; //先將cur賦給next 為了下面如果next改變後不滿足, next._row--;//上
if (checkisaccess(a, n, next))
next = cur;
next._col++;//右
if (checkisaccess(a, n, next))
next = cur;
next._row++;//下
if (checkisaccess(a, n, next))
next = cur;
next._col--;// 左
if (checkisaccess(a, n, next))
next = cur;
paths.pop(); //如果遇到不通(在此即四個方向都不為0)然後,讓棧中儲存
} 的座標pop(即往回倒)重複試探四個方向 直到找到另一
return false; 條可通路徑;
}void display(int* a, int n) //列印
至此,乙個簡單的迷宮就完成了,以上左邊的圖就是開始的迷宮。右邊的圖是結果。最終,每次走過的地方都被標誌成2.
本文出自 「土豆_」 部落格,請務必保留此出處
迷宮的簡單實現
迷宮 使用乙個二維陣列模擬迷宮,在這裡使用棧結構和回溯的演算法簡單實現迷宮。給定乙個入口,先將入口座標入棧。再對四個方向進行判斷,是否能走,如果能走將下乙個節點入棧。當無路可走時,出棧節點,回溯到上乙個節點進行上一步判斷。當找到乙個出口時 再回溯到上乙個岔路口,尋找另外通路。如果將所有節點出棧,則說...
簡單的實現迷宮問題
在實現迷宮問題,是對棧這種結構進一步的熟悉和使用。首先,可以定義乙個10 10的二維陣列,0代表通路,1代表牆.再定義乙個座標的結構體。開始走迷宮.開始走迷宮的時候,無非就4個方向,上下左右,判斷哪個方向能走通,那就沿著那條路繼續走,走到 死路 那就返回到第一次分叉的路口,換個方向繼續走.話不多說,...
迷宮程式簡單實現
這個程式是將乙個迷宮的程式列印出來,具體的操作我會在下面的程式中具體的 給出來,其中分為兩乙個小的程式,乙個是這個檔案,另乙個是乙個以head.cpp檔案 為main函式的檔案,好了,程式開始了 include iostream.h include malloc.h define error 0 d...