層層遞進 廣度優先搜尋

2021-09-22 22:27:25 字數 2096 閱讀 6636

從誰開始就把誰存到佇列裡,從它開始進行以後的步驟,廣搜的話會遇到許多分支一類的東西,每遇到乙個分支就要push進佇列裡,每次處理判斷時都要處理最前邊的,即front(),處理的同時也要將其刪掉pop(),方便可以一直處理front()的那個。在處理的過程中也要判斷找尋是否是結果,進行判斷。。。。進行廣搜要靈活將struct與queue結合使用,化繁為簡。

廣搜適用於最短最小問題,先搜到的路徑一定是最小的。

特點:(1)在產生新的子結點時,深度越小的結點越先得到擴充套件,即先產生它的子結點。為使演算法便於實現,存放結點的資料庫一般用佇列的結構。

(2)無論問題性質如何不同,利用廣度優先搜尋法解題的基本演算法是相同的,但資料庫中每一結點內容,產生式規則,根據不同的問題,有不同的內容和結構,就是同一問題也可以有不同的表示方法。

(3)當結點到跟結點的費用(有的書稱為耗散值)和結點的深度成正比時,特別是當每一結點到根結點的費用等於深度時,用廣度優先法得到的解是最優解,但如果不成正比,則得到的解不一定是最優解。這一類問題要求出最優解,一種方法是使用後面要介紹的其他方法求解,另外一種方法是改進前面深度(或廣度)優先搜尋演算法:找到乙個目標後,不是立即退出,而是記錄下目標結點的路徑和費用,如果有多個目標結點,就加以比較,留下較優的結點。把所有可能的路徑都搜尋完後,才輸出記錄的最優路徑。(4)廣度優先搜尋演算法,一般需要儲存產生的所有結點,佔的儲存空間要比深度優先大得多,因此程式設計中,必須考慮溢位和節省記憶體空間得問題。

(5)廣度優先搜尋法一般無回溯操作,即入棧和出棧的操作,所以執行速度比深度優先搜尋演算法法要快些。

(其實吧,我覺得它最大的特點就是**冗長,但是該會的還是得會,就這一塊我迷了好一陣,還是先把模板給背了呢)

下面就貼幾個例題吧,首先是用深搜做的那個迷宮問題。

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

int a[100][100],book[100][100];

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

struct node

;int main()

if(tx==zdx&&ty==zdy)

}if(flag==1)

break;

head++;

}cout<#include#include#include#include#includeusing namespace std;

char a[25][25];

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

struct node

;int getnum(int i,int j)

x=i;

y=j;

while(a[x][y]!='#')

x=i;

y=j;

while(a[x][y]!='#')

x=i;

y=j;

while(a[x][y]!='#')

return sum;

}int main()

; int i,j,k,n,m,mx,my,csx,csy,sum,ma=0,tx,ty;

cin>>n>>m>>csx>>csy;

for(i=0;in||ty>m||tx<=0||ty<=0)

continue;

if(a[tx][ty]=='.'&&book[tx][ty]==0)}}

head++;

}printf("將炸彈放到(%d,%d)處,可以消滅%d個敵人\n",mx,my,ma);

return 0;

}/*13 13 3 3

#############

#gg.ggg#ggg.#

###.#g#g#g#g#

#.......#..g#

#g#.###.#g#g#

#gg.ggg.#.gg#

#g#.#g#.#.#.#

##g...g.....#

#g#.#g###.#g#

#...g#ggg.gg#

#g#.#g#g#.#g#

#gg.ggg#g.gg#

#############

執行結果:

將炸彈放到(7,11)處,可以消滅10個敵人*/

層層遞進 廣度優先搜尋

從題目可以看出,廣度優先搜尋是一層一層的搜尋,而深搜是一根筋,一直搜到底o o哈哈 到底怎麼實現廣搜呢?深搜是遞迴,想必大家可能恨死遞迴了。廣搜不用遞迴,就用迴圈和佇列就夠!這個題目,從起點開始,到達終點最短路徑是多少步?圖中鎖是障礙物。先構建乙個佇列,還是用結構體。還得有乙個陣列book來記錄走過...

搜尋 廣度優先搜尋

廣度優先搜尋一層一層地進行遍歷,每層遍歷都是以上一層遍歷的結果作為起點,遍歷乙個距離能訪問到的所有節點。需要注意的是,遍歷過的節點不能再次被遍歷。class solution,int shortestpathbinarymatrix vectorint grid length return 1 cl...

廣度優先搜尋

include include include include using namespace std struct node 圖頂點結構定義 typedef struct node graph 圖形的結構新型態 struct node head 9 圖形頂點陣列 int visited 9 遍歷標...