【数据结构】深(广)度优先搜索
深度优先搜素代码示例:
n件物品,每件物品重量为W[i],价值为c[i],选出若干物品放入容量为V的背包中,使价值之和最大
void DFS(int index,int sumW,int sumC){ //index为当前处理的物品编号
if(index==n){ //选了n件
if(sumW<=V && sumC>maxValue){
maxValue=sumC;
}
return;
}
DFS(index+1,sumW,sumC);
DFS(index+1,sumW+w[index],sumC+c[index]);
}
//剪枝
void DFS(int index,int sumW,int sumC){
if(index==n)
return; //已经完成对n件物品的选择;
DFS(index+1,sumW,sumC); //不选第index件
if(sumW+W[index]<=V){
if(sumC+c[index]>ans){
ans=sumC+c[index]; //更新最大价值
}
DFS(index+1,sumW+w[index],sumC+c[index]); //选第index件
}
}
广度优先搜索模板:
void BFS(){
queue<int> q;
q.push(root);
while(!q.empty()){
int top=q.front();
printf("%d ",top);
q.pop();
for(int i=0;i<n;i++){
if(edg[v][i]!=0)
q.push(i);
}
}
}