c语言背包问题 c语言背包问题原理

大家好,精选小编来为大家解答以上问题 。c语言背包问题原理,c语言背包问题很多人还不知道,现在让我们一起来看看吧!

c语言背包问题 c语言背包问题原理

文章插图
1、首先打开VC 6.0
2、选择文件,新建
3、选择c源文件新建一个空白文档
4、首先声明头文件和常量
5、# includestdio.h
6、#定义编号10/*定义物品总数*/
7、#定义内容10 /*定义包的容量*/
8、写一个函数,用来得到多个最优解
9、空的背包(int v[数字],int w[数字],int c,int m[数字][内容])
10、{
11、int n=NUM-1;
12、int i,j;
13、int jMax
14、if((w[n]-1) c)
15、jMax=w[n]-1;
16、其他
17、jMax=c;
18、/* 初始化m[n][j] */
19、for(j=0;j=jMaxj)
20、m[n][j]=0;
21、for(j=jMax 1;j=c;j)
22、m[n][j]=v[n];
23、/*使用非递归的算法来求解m[i][j] */
24、for(I=n-1;I 0;我-)
25、{
26、if((w[i]-1) c)
27、jMax=w[I]-1;
28、其他
29、jMax=c;
30、for(j=0;j=jMaxj)
31、m[I][j]=m[I 1][j];
32、for(j=jMax 1;j=c;j)
33、{
34、if(m[i 1][j]=(m[i 1][j-w[i]] v[i]))
35、m[I][j]=m[I 1][j];
36、其他
37、m[I][j]=m[I 1][j-w[I]]v[I];
38、}
39、}
40、if(cw[0])
41、{
42、if(m[1][c]=(m[1][c-w[0]] v[0]))
43、m[0][c]=m[1][c];
44、其他
45、m[0][c]=m[1][c-w[0]]v[0];
46、}
47、其他
48、m[0][c]=m[1][c];
49、}
50、再编写一个函数,用来寻找最优解
51、/*寻找最优解*/
52、void追溯(int标志[数字],int w[数字],int m[数字][内容])
53、{
54、int n=NUM-1;
55、int I;
56、int c=内容;
57、for(I=0;I n;我)
58、{
59、if(m[i][c]==m[i 1][c])
60、flag[I]=0;
61、其他
62、{
63、flag[I]=1;
64、c-=w[I];
65、}
66、}
67、if(m[n][c] 0)
68、flag[n]=1;
69、其他
70、flag[n]=0;
71、}
72、写个函数,用来输出最优解
73、void printResult(int flag[NUM],int w[NUM],int v[NUM],int m[NUM][CONTENT])
74、{
75、int I;
76、printf('背包应该包含:\ n’);
77、printf('数量重量值\ n’);
78、for(I=0;我编号我)
79、{
80、if(flag[i]==1)
81、printf(' %d %d %d\n ',I,w[i],v[I]);
82、}
83、printf('背包中最大值为:%d\n ',m[0][内容]);
84、}
85、主函数
86、int main()
87、{
88、int value[NUM]={5,2,3,4,3,6,5,7,8,2 };
89、int weight[NUM]={2,1,3,2,4,3,5,6,2,2 };
90、int c=内容;
91、int max value[NUM][CONTENT];
92、int flag[NUM]={0,0,0,0,0,0,0,0 };
93、printf(' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ');
94、printf('*此程序将求解* \ n ');
95、printf(* 0-1 napsack的问题* \ n ');
96、printf(' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ');
97、/*计算最优值*/
98、背包(值,重量,c,最大值);
99、/*构造最优解*/
100、追溯(标志、权重、最大值);
101、/*打印程序的结果*/
102、打印结果(标志、权重、值、最大值);
103、getch();
104、返回0;
105、}
106、运行结果
【c语言背包问题 c语言背包问题原理】