因為前兩天的藍橋杯發現了這個知識盲區,且很多問題這個方法也是很有用的,所以花了幾天時間學了這個演算法。
剛開始也是慢慢從八皇后問題到馬走日遍歷問題慢慢學的。最後我的經驗是,bfs統一有乙個通式,即再遞迴之後將之前標記的元素還原,在正式解決題目之前,先分享一下最近了解的幾個新知識吧。
首先c++的萬能標頭檔案。寫了這個就不用再天天為敲標頭檔案而煩惱了。
![萬能標頭檔案#include](
其次,因為手動輸入迷宮比較複雜,所以又找了大佬學習了一下,讀檔案賦值給矩陣。
具體方法如下。
ifstream f("f:\\qqpcmgr\\desktop\\maze.txt");//雙斜槓是因為「「的輸出要求。
char t;//考慮到如果用int型別儲存,則t會儲存一整行。
for(int i=0;i> t;
a[i][j]=t-'0';//因為不能用int儲存所以用」-『0』「的方式轉換一下。
}
具體的題目就不詳細說了,題目大致表達的是乙個30*50階的迷宮,『0』代表可走,『1』代表障礙。因為藍橋杯原題是要在所有可行路中找到英文本母字典排序最小的一組(往下走記為d;往上走記為u;往左走記為l;往右走記為r。dusing namespace std;
int n=30,m=50;
int a[30][50];
bool inboard(int x,int y)//判斷是否越界
void dfs(int x,int y)
dfs(0,0);
return 0;
}
題目中
else
就是我所說的dfs的通式。
如果有錯誤還請指出,共同進步!或者我單方面進步啊!嘿嘿嘿
poj 3984 迷宮問題 dfs 求迷宮路徑
利用圖論中深搜的思想,存在邊就是x,y x 1,y 還有x,y x,y 1 然後仍然是訪問未訪問的而且不是牆壁的地方。這樣保證不走已經搜尋過,走不通的路。唯一一種需要重複訪問已經訪問的結點的情況是已經無路可走了,只能返回,這樣就在棧中將路徑取出來,把自己現在的那個先pop掉,然後實現回溯。最後用向量...
poj 3984 迷宮問題 dfs 求迷宮路徑
利用圖論中深搜的思想,存在邊就是x,y x 1,y 還有x,y x,y 1 然後仍然是訪問未訪問的而且不是牆壁的地方。這樣保證不走已經搜尋過,走不通的路。唯一一種需要重複訪問已經訪問的結點的情況是已經無路可走了,只能返回,這樣就在棧中將路徑取出來,把自己現在的那個先pop掉,然後實現回溯。最後用向量...
迷宮問題dfs
迷宮問題 棧作為深度優先遍歷 dfs 採用的搜尋方法的特點是盡可能先對縱深方向進行搜尋 可以最快的找到解 include define m 8 define n 8 define maxsize 1000 typedef struct box typedef struct sttype 迷宮問題常用...