欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

深度优先搜索

程序员文章站 2022-05-23 19:32:12
...

深度优先搜索

枚举所有完整路径以遍历所有情况的搜索方法。
使用递归可以很好实现深度优先搜索。
例题:有n件物品,每件物品的重量为w[i],价值为c[i]。现在需要选出若干件物品放入一个容量为V的背包中,使得在选入背包的物品重量和不超过容量V的前提下,让背包中物品的价值之和最大,求最大价值(1<= n <= 20)

#include<stdio.h>
void dfs(int index,int weight,int value);
int V,n; //背包容量,商品个数
int w[30],v[30];//商品重量,商品价值
    int maxvalue=0;
int main()
{

    scanf("%d%d",&n,&V);
    for(int i=0;i<n;++i){
        scanf("%d",&w[i]);
    }
    for(int i=0;i<n;++i){
        scanf("%d",&v[i]); 
    } 
    dfs(0,0,0);
    printf("%d\n",maxvalue);
    return 0;
} 

void dfs(int index,int weight,int value)
{
    if(n==index){
        return;
    }
    dfs(index+1,weight,value);
    if(weight+w[index]<=V&&value+v[index]>maxvalue){
        maxvalue=value+v[index];
    }
    dfs(index+1,weight+w[index],value+v[index]);
}