深度優先搜尋和廣度優先搜尋

2021-09-23 22:27:24 字數 835 閱讀 6783

深度優先搜尋

可以用這個圖來很好的幫助我們理解dfs,dfs是一種列舉所有完整路徑來遍歷所有情況的搜尋方法,可以使用遞迴來很好的實現dfs,遞迴式可以理解為:

解決的典型問題給定乙個序列,列舉這個序列的所有子串行,從中選擇乙個某方面最優的子串行。也可以簡化理解為列舉從n個整數中選擇k個數的所有方案

具體問題

有n件物品,每件物品的重量為w[i],價值為c[i],現在需要選出若干件物品放入乙個容量為v的揹包中,使得在選入揹包的物品重量和不超過容量v的前提下,讓揹包中物品的價值之和最大,求最大值。

解決思路:對每個物品都有選擇或者不選兩條路徑,因此總共有2的n次方種可選方案,可以用dfs進行遍歷,更新maxvalue,遍歷完成之後即可得到所需結果。

void dfs(int index,int sumw,int sumc)

return;

} dfs(index+1,sumw,sumc);

dfs(index+1,sumw+w[index],sumc+c[index]);

}

廣度優先搜尋

bfs以同心圓的方式向外擴散,而dfs則是沿著一條線前進的思路

void bfs(int s)

}

深度優先搜尋和廣度優先搜尋

深度優先的思想是先記住當前的起點,然後選定乙個方向一條道走到黑,若失敗則回到起點再選定另外乙個方向走到黑。廣度優先的思想是記住當前的起點,然後選定各個方向的相鄰點作為新的起點,再繼續。可以看出,深度優先和廣度優先都需要記住當前的起點,不同的是深度優先每次只需要記住乙個方向的相鄰點,廣度優先則要記住所...

廣度優先搜尋和深度優先搜尋

dbf深度優先搜尋,最經典的方法,可以使用遞迴來實現。結構體定義 typedef char vertextype typedef int edgetype define maxvex 100 define infinite 65535 typedef struct mgraph 測試函式如下 mgr...

深度優先搜尋和廣度優先搜尋

定義 圖 graph 是由頂點的有窮非空集合和頂點之間邊的集合組成,通常表示為 g v,e 其中,g表示乙個圖,v是圖g中頂點的集合,e是圖g中邊的集合.簡單點的說 圖由節點和邊組成。乙個節點可能與眾多節點直接相連,這些節點被稱為鄰居。如二叉樹就為乙個簡單的圖 廣度優先搜尋演算法 breadth f...