02.主文件:
03.package main;
04.
05.import java.io.BufferedReader;
06.import java.io.File;
07.import java.io.FileNotFoundException;
08.import java.io.FileReader;
09.import java.io.IOException;
10.import java.util.ArrayList;
11.import java.util.List;
12.
13.public class Knapsack {
14. public static void main(String[] args) {
15. String path="E:\\Knapsack.txt";
16. try {
17. List list=getGoods(path);
18. list=getlist(list);
19. int W=0,V=0;
20. System.out.println(list.size());
21. for(int i=0;i<list.size();i++){
22. System.out.println(((goods)list.get(i)).getweight()+" "+((goods)list.get(i)).getvalue());
23. //System.out.println(((goods)list.get(i)).getid());
24. }
25. W=getWeight(list);
26. V=getValue(list);
27. int[] Id=getId(list);
28. System.out.println(W);
29. System.out.println(V);
30. for(int k=0;k<Id.length;k++){
31. if(Id[k]!=0)
32. System.out.println(Id[k]);
33. }
34. } catch (IOException e) {
35. // TODO Auto-generated catch block
36. e.printStackTrace();
37. }
38.
39. }
40. //读取文件中的数据
41. public static List getGoods(String path)throws IOException{
42. List list=new ArrayList();
43. FileReader file=new FileReader(path);
44. BufferedReader bu=new BufferedReader(file);
45. String mun=bu.readLine();
46. String[] str=mun.split(" ");
47. int id=0;//物品的id编号
48. while(mun!=null){
49. if(str[0]==mun)
50. str=mun.split(" ");
51. {
52. goods gd=new goods();
53. gd.setid(id);
54. gd.setweight(Integer.parseInt(str[0]));
55. gd.setvalue(Integer.parseInt(str[1]));
56. list.add(gd);
57. id++;
58. }
59. mun=bu.readLine();
60. if(mun!=null)
61. str=mun.split(" ");
62. }
63. return list;
64. }
65. //将全部物品按重量由小到大排序
66. public static List getlist1(List list){
67. List lt=new ArrayList();
68. goods gd=(goods)list.get(0);
69. goods gs=new goods();
70. goods t=new goods();
71. lt.add(gd);
72. for(int i=1;i<list.size();i++){
73. gd=(goods)list.get(i);
74. for(int j=(i+1);j<list.size();j++){
75. gs=(goods)list.get(j);
76. if(gs.getweight()<gd.getweight()){
77. t.setgoods(gs);
78. gs.setgoods(gd);
79. gd.setgoods(t);
80. }
81. }
82. lt.add(gd);
83. }
84. return lt;
85. }
86. //将全部按重量排序号的物品按价值由大到小排序
87. public static List getlist(List list){
88. //list=getlist1(list);//全部物品按重量由小到大排序好的列表
89. List li=new ArrayList();
90. goods gd=(goods)list.get(0);
91. goods gs=new goods();
92. goods t=new goods();
93. li.add(gd);
94. for(int i=1;i<list.size();i++){
95. gd=(goods)list.get(i);
96. for(int j=(i+1);j<list.size();j++){
97. gs=(goods)list.get(j);
98. if(gs.getvalue()>gd.getvalue()){
99. t.setgoods(gs);
100. gs.setgoods(gd);
101. gd.setgoods(t);
102. }
103. }
104. li.add(gd);
105. }
106. return li;
107. }
108.
109. public static int getWeight(List list){
110. goods g=(goods)list.get(0);
111. int w=0,v=0;
112. int w0=g.getweight();
113. w=g.getweight();
114. int k=0;//物品数量
115. for(int i=1;i<list.size();i++){
116. g=(goods)list.get(i);
117. while(w0>0){
118. if(k==5)
119. break;
120. k++;
121. w0=w0-g.getweight();
122. v=v+g.getvalue();
123. if(w0<0){
124. k--;
125. w0=w0+g.getweight();
126. v=v-g.getvalue();
127. break;
128. }
129. }
130. }
131. w=w-w0;
132. return w;
133. }
134. public static int getValue(List list){
135. goods g=(goods)list.get(0);
136. int w=0,v=0;
137. int w0=g.getweight();
138. w=g.getweight();
139. int k=0;//物品数量
140. for(int i=1;i<list.size();i++){
141. g=(goods)list.get(i);
142. while(w0>0){
143. if(k==5)
144. break;
145. k++;
146. w0=w0-g.getweight();
147. v=v+g.getvalue();
148. if(w0<0){
149. k--;
150. w0=w0+g.getweight();
151. v=v-g.getvalue();
152. break;
153. }
154. }
155. }
156. return v;
157. }
158. public static int[] getId(List list){
159. int[] Id=new int[list.size()];
160. goods g=(goods)list.get(0);
161. int w0=g.getweight();
162. int w=w0;
163. int k=0;//物品数量
164. for(int i=1;i<list.size();i++){
165. g=(goods)list.get(i);
166. while(w0>0){
167. if(k==5)
168. break;
169. k++;
170. w0=w0-g.getweight();
171. if(w0<0){
172. k--;
173. w0=w0+g.getweight();
174. break;
175. }
176. }
177. if(w0!=w)
178. Id[i]=g.getid();
179. w=w0;
180. }
181. return Id;
182. }
183.}
184.jean物品类实现:
185.01.package main;
02.
03.public class goods {
04. private int weight;
05. private int value;
06. private int id;
07.
08. public goods(){
09. this.id=0;//物品的编号
10. this.weight=0;//物品的重量
11. this.value=0;//物品的价值
12. }
13. public void setgoods(goods g){
14. this.weight=g.weight;
15. this.id=g.id;
16. this.value=g.value;
17. }
18. public int getid(){
19. return this.id;
20. }
21. public int getweight(){
22. return this.weight;
23. }
24. public int getvalue(){
25. return this.value;
26. }
27. public void setid(int id){
28. this.id=id;
29. }
30. public void setweight(int weight){
31. this.weight=weight;
32. }
33. public void setvalue(int value){
34. this.value=value;
35. }
36.
37.}
第七周作业——背包算法 .
最新推荐文章于 2022-10-28 23:59:50 发布