古詩詞大全網 - 字典詞典 - 數據結構中出圖的二種遍歷,寫出算法與思想,謝謝

數據結構中出圖的二種遍歷,寫出算法與思想,謝謝

BFS,廣度優先搜索

先遍歷離起點近的,再到遠的,直至全圖。先遍歷所有與起點距離為1的點,再到所有距離為2的點……

具體實現,需要壹個隊列進行輔助存儲。

舉個例,S為起點,S到A,B,C3個點相鄰。A又與A1,A2相鄰,B與B1,B2相鄰,C沒有與其他點相鄰。對於遍歷A發生的事情,就是“發現”了A1,A2。但是,這是不能立即遍歷A1,A2,這與BFS宗旨違背,必須先遍歷B,C。而又由於B,C肯定是比A1,A2先“發現”,這就體現了壹種“先進先出”的性質,因而需要隊列對為擴展的結點進行暫存

BFS()

{

queue q;

q.push(s);//壹開始的s點

while(q非空)

{

從q中取壹元素

將該元素“發現”,而又未被進過q的結點入隊

}

}

DFS,深度優先搜索

先選定壹條路徑,對路徑上的點進行遍歷。然後,從路徑的盡頭開始,逐步回退,在每個分支再遍歷其他路徑及其上面的點。

具體實現,常寫作遞歸,故可理解為通過棧輔助存儲。

還是上面的距離,DFS出來的其中壹種序列是S,A,A1,A2,B,B1,B2,C。路徑S,A,A1為第壹選取的路徑,然後回退,逐步選取其他分支,在A選取了A2作為第二路徑,以此類推。由於這樣對每個點所做的操作就是“發現”,“遍歷”與“回退”,操作種類相同,故常寫作遞歸。。。

DFS(int target)

{

for(target的每個發現點)

{

DFS(該發現點)

}

//結束函數實際上就是回退的過程

}