從誰開始就把誰存到佇列裡,從它開始進行以後的步驟,廣搜的話會遇到許多分支一類的東西,每遇到乙個分支就要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 遍歷標...