数据结构,背包问题
#include"stdio.h"constSTACK_INIT_SIZE=100;constSTACKINCREMENT=10;constTRUE=1;constFAL...
#include "stdio.h"
const STACK_INIT_SIZE=100;
const STACKINCREMENT=10;
const TRUE=1;
const FALSE=0;
typedef int SElemType;
typedef struct {
SElemType *elem;
int top; /*栈顶位置(下标),top=-1时,表示空栈*/
int stacksize;
int incrementsize;
}SqStack;
void InitStack ( SqStack *S, int maxsize=STACK_INIT_SIZE,int incresize=STACKINCREMENT)
{
S->elem=new SElemType[maxsize];
S->top = -1;
S->stacksize=incresize;
S->incrementsize=incresize;
}
void Push (SqStack &S, SElemType e)
{
if (S.top == S.stacksize-1)
return;
S.top++;
S.elem[S.top] = e; //加入新元素
}
bool Pop(SqStack &S, SElemType &e)
{
if(S.top== -1)
return FALSE;
e=S.elem[S.top --];
return TRUE;
}
bool GetTop (SqStack &S, SElemType &e)
{
if(S.top==-1) return FALSE;
e=S.elem[S.top];
return FALSE;
}
bool StackEmpty(SqStack &S)
{
if(S.top== -1)
return TRUE;
else
return FALSE;
}
bool StackTraverse(SqStack &S)
{
int i;
for (i=S.top;i>=0;i--)
{
printf("%d",S.elem[i]);
}
return true;
}
void knapsack(int w[],int T,int n)
{
SqStack S;
InitStack(&S);
int k=0;
do
{
while(T>0 && k<n){
if (T -w[k] >=0)
{
Push(S,k);T-=w[k];
}
k++;
}
if(T==0) StackTraverse(S);
Pop(S,k);T+=w[k];
k++;
} while (!StackEmpty(S)||(k<n));
}
int main()
{
int T,n;
SqStack S;
knapsack(S,T,n);
return 0;
}
最后给出是这样怎么回事? 展开
const STACK_INIT_SIZE=100;
const STACKINCREMENT=10;
const TRUE=1;
const FALSE=0;
typedef int SElemType;
typedef struct {
SElemType *elem;
int top; /*栈顶位置(下标),top=-1时,表示空栈*/
int stacksize;
int incrementsize;
}SqStack;
void InitStack ( SqStack *S, int maxsize=STACK_INIT_SIZE,int incresize=STACKINCREMENT)
{
S->elem=new SElemType[maxsize];
S->top = -1;
S->stacksize=incresize;
S->incrementsize=incresize;
}
void Push (SqStack &S, SElemType e)
{
if (S.top == S.stacksize-1)
return;
S.top++;
S.elem[S.top] = e; //加入新元素
}
bool Pop(SqStack &S, SElemType &e)
{
if(S.top== -1)
return FALSE;
e=S.elem[S.top --];
return TRUE;
}
bool GetTop (SqStack &S, SElemType &e)
{
if(S.top==-1) return FALSE;
e=S.elem[S.top];
return FALSE;
}
bool StackEmpty(SqStack &S)
{
if(S.top== -1)
return TRUE;
else
return FALSE;
}
bool StackTraverse(SqStack &S)
{
int i;
for (i=S.top;i>=0;i--)
{
printf("%d",S.elem[i]);
}
return true;
}
void knapsack(int w[],int T,int n)
{
SqStack S;
InitStack(&S);
int k=0;
do
{
while(T>0 && k<n){
if (T -w[k] >=0)
{
Push(S,k);T-=w[k];
}
k++;
}
if(T==0) StackTraverse(S);
Pop(S,k);T+=w[k];
k++;
} while (!StackEmpty(S)||(k<n));
}
int main()
{
int T,n;
SqStack S;
knapsack(S,T,n);
return 0;
}
最后给出是这样怎么回事? 展开
1个回答
景联文科技
2024-06-11 广告
2024-06-11 广告
杭州景联文科技有限公司专注于大模型数据集的研发与应用。我们深知,在人工智能飞速发展的时代,数据是驱动模型优化的核心动力。因此,我们致力于构建丰富、多元的大模型数据集,涵盖各行各业,为AI模型提供充足的“养分”。通过不断积累与优化,我们的数据...
点击进入详情页
本回答由景联文科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询