搜尋演算法(DFS和BFS)

2021-09-25 10:08:54 字數 922 閱讀 1097

題目:

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

解題**如下:

#includeconst int maxn=30;

int n,v,maxvalue=0; //物品件數n,揹包容量v,最大價值maxvalue

int w[maxn],c[maxn]; //w[i]為每件物品的重量,c[i]為每件物品的價值

//dfs,index為當前處理的物品編號

//sumw和sumc分別為當前總重量和當前總價值

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

dfs(index+1,sumw,sumc); //不選第index件物品

dfs(index+1,sumw+w[index],sumc+c[index]); //選第index件物品

} int main()node;

int n,m;

int matrix[maxn][maxn];

bool inq[maxn][maxn]=;

int x[4]=;

int y[4]=;

bool judge(int x,int y)

//bfs函式訪問位置(x,y)所在的塊,將該塊中所有"1"的inq都設定為true

void bfs(int x,int y)

} }

} int main(){

scanf("%d%d",&n,&m);

for(int x=0;xdfs主要棧靠實現,例子中的遞迴實現本質上是利用系統對於遞迴所呼叫乙個叫系統棧的東西來存放遞迴中的每一層狀態。

bfs主要靠佇列實現,佇列先進先出的規律與棧截然相反。

一文弄懂搜尋演算法中的DFS和BFS

有一位小夥伴問我,迷宮問題怎麼解決,我說dfs或者bfs,然後,ta說,哦哦,這我知道,就是圖裡面的演算法嘛,但,這是個迷宮,難道我要把這個二維矩陣變成圖嘛?我 當場去世。於是我開啟了我的長篇大論。希望大家有所收穫。首先,回答一下那位小夥伴的問題,這個演算法確實屬於圖裡面的演算法,但並不是說是專門針...

分享兩個常見的搜尋演算法 BFS和DFS

摘要 本文為大家分享兩個常見的搜尋演算法 bfs和dfs。本次分享兩個常見的搜尋演算法 1.bfs 即廣度優先搜尋 2.dfs 即深度優先搜尋 給定乙個由 1 陸地 和 0 水 組成的的二維網格,計算島嶼的數量。乙個島被水包圍,並且它是通過水平方向或垂直方向上相鄰的陸地連線而成的。你可以假設網格的四...

BFS廣度優先搜尋演算法

廣度優先搜尋 bfs 包含一下幾個關鍵點 1.狀態 2.狀態轉移方式 3.有效狀態 4.佇列 5.標記 void bfs 起始點 隊列為空,廣搜結束 看乙個例子 說有一天公主被大魔王抓了,關進了乙個迷宮裡,需要你這位勇士去營救 當然成功了就自然是公升職加薪贏取白富美啦 這個迷宮以二維陣列的形式給出 ...