深搜與廣搜以及例題

2021-07-28 23:00:53 字數 972 閱讀 2175

做題目的時候,遇見了兩個型別十分相似的題目,可以乙個直接輸出最短的步數,乙個要儲存,,這個就很犯難

然後通過這兩題,有重新了解了乙個bfs與dfs的區別

一、路徑的輸出

1.dfs

dfs其實就是一直順著乙個方向不斷的搜尋知道找到了目標為止。路徑輸出的時候,利用記錄前面的點即可

#include#include#include#includeusing namespace std;

#define n 9

int cnt;

struct pointpath[n*n];

int maze[n][n];

int vis[n][n];

int dir[4][2]=,,,};

point star,end;

void output()

void dfs(int x,int y,int step)

for(int i=0;i<4;i++)

}}int main()

2 bfs

bfs就是不斷向四周擴充套件,然後找到目標節點,利用陣列模擬佇列(或者直接利用stl的佇列,可是stl裡面的佇列用於儲存路徑有些麻煩,適用於求最小步數)

#include#include#include#include#includeusing namespace std;

#define maxn 500010

#define n 10

int ans,end;

int sx,sy,ex,ey;

int vis[n][n];

int dir[8][2]=,,,,,,,};

char mp[n][n];

struct pointp[maxn];

void bfs()

}}void output(int x)

int main()

深搜與廣搜

深搜是一種一條路走到黑,碰壁就倒退的演算法。運用遞迴思想,如果到了不符合條件的節點就撤回一步,然後再選擇另一條路走下去。如果這個節點的所有路徑都走完了,再撤回一步。最簡單的模板 int x 4 int y 4 上下左右四個方向走。也可以八個方向,這裡我就不寫了。void dfs int fx,int...

廣搜與深搜演算法

bfs 廣度優先搜尋 從起點開始,檢視與其相鄰並且滿足題中條件的周圍的所有點 第一層點 然後再以他們為 起點 再去檢視與他們相鄰的第二層的點,一層一層的遍歷,直到找到目標。廣搜一般用於尋找最小路徑等型別題目,因為是層層尋找,所以尋找到的目標一定是最好的解,其大概過程如同一滴水滴到水池產生的水波。但是...

廣搜和深搜

一般來說,廣搜常用於找單一的最短路線,或者是規模小的路徑搜尋,它的特點是 搜到就是最優解 而深搜用於找多個解或者是 步數 已知 好比3步就必需達到前提 的標題,它的空間效率高,然則找到的不必定是最優解,必需記實並完成全數搜尋,故一般情況下,深搜需要很是高效的剪枝 優化 像搜尋最短路徑這些的很顯著若是...