前一陣一直想寫這個程式,一直沒有有效的解決儲存路徑的問題。現在想到的辦法是用佇列儲存每個節點的下表來表示路徑。
這個演算法解決問的問題是: 建乙個迷宮(用矩陣表示m行,n列)期中矩陣的左上角(座標為(0,0的點)為入點,找尋到所有到(m-1,n-1)的所有不重複路徑,並列印出來。
**注釋如下
#include
#include
using namespace std;
dequeq;//用於儲存路徑的佇列
struct node;
void print();//用於列印路徑的函式
bool f(int i,int j,int m,int n);//判斷是否超越迷宮的邊界
void search(node**p,int i,int j,int m,int n);//深度優先搜尋
void main()
q.push_back(0);//將入點座標壓入佇列
q.push_back(0);
search(p,0,0,m,n);//搜尋
}void print(){
deque::iterator p;
int count=0;
for(p=q.begin();p!=q.end();p++){
count++;
cout<<*p;
if(count%2==0) cout《演算法核心可以簡述為 把當前位置設定為「牆」的目的是:如果找到了終點,那麼會得到答案,如果是堵死的,那麼這條路不可走,相當於牆,直接堵死以免在之後的搜尋中重複
深度優先演算法走迷宮
prim生成迷宮 大致思路是 首先,生成迷宮全部都是圍牆設為1表示圍牆的值就是1。其次,把迷宮之外的輪廓設定為0表示邊框,然後設定起點和重點的值分別為2和2.接下來就要判斷起始點下下個低方判斷是否是圍牆,因為防止打穿圍牆或者達到之前的路上在圍牆中不斷的挖路從而生成迷宮。方法主要是從起點開始每乙個上下...
棧 深度優先搜尋與回溯演算法求解迷宮
利用棧和回溯演算法求解迷宮 這是老師帶著做的,自己寫不知道什麼時候能調出來 這就是和老師的差距,這樣的程式他就10幾分鐘而已 code include define max row 5 define max col 5 int maze max row max col struct pointsta...
深度優先搜尋DFS(迷宮問題)
問題及 給出迷宮的圖紙和初始終點位置,用dfs求最小步數。include using namespace std int n,m,p,q,min 99999999 int a 51 51 book 51 51 void dfs int x,int y,int step 順時針 右下左上 int tx...