搞了好多天才调出来,一个if语句中的关系运算符==和一个写错的数组名就困扰了我大半天,可能会有一些不合适的地方,希望大佬们看到可以多多指教。
//广搜解决01背包问题
#include<iostream>
#include<queue>
using namespace std;
int N, V;
//搜索树结点定义
struct Node
{
int *x = new int[N];
int v;//当前背包体积
int m;//当前背包价值
int k;//当前所属搜索到的层数
};
int bestM=0;//背包最高价值
//借用广搜树解决01背包问题
void BFS(int N,int V,int v[],int m[])
{
int i;
Node Root, Front, lChild, rChild;
queue<Node>Q;//创建结点顺序队列
Root.v = 0; Root.m = 0; Root.k = 0;
for (i = 0; i < N; i++)
Root.x[i] = 0;
Q.push(Root);//根结点入队
while (!Q.empty())
{
Front = Q.front();
Q.pop();
//寻找最佳价值
if (Front.m > bestM)
bestM = Front.m;
//扩展搜索树结点
if(Front.k<N)
{
if (Front.v + v[Front.k] <= V)//如果把第k件物品装入不会超过最大容量
{
//探测左子树
for (i = 0; i < N; i++)
{
if (i == Front.k)
lChild.x[i] = 1;
else
lChild.x[i] =