图论习题及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
作业解答
练习题2 利用matlab编程FFD算法完成下题:
设有6种物品,它们的体积分别为:60、45、35、20、20和20单位体积,箱子的容积为100个单位体积。
解答一:
function [num,s] = BinPackingFFD(w,capacity)
%一维装箱问题的FFD(降序首次适应)算法求解:先将物体按长度从大到小排序,
%然后按FF算法对物体装箱
%输入参数w为物品体积,capacity为箱子容量
%输出参数num为所用箱子个数,s为元胞数组,表示装箱方案,s{i}为第i个箱子所装
%物品体积数组
%例w = [60,45,35,20,20,20]; capacity = 100;
% num=3,s={[1,3],[2,4,5],6};
w = sort(w,'descend');
n = length(w);
s = cell(1,n);
bin = capacity * ones(1,n);
num = 1;
for i = 1:n
for j = 1:num + 1
if w(i) < bin(j)
bin(j) = bin(j) - w(i);
s{j} = [s{j},i];
if j == num + 1
num = num + 1;
end
break;
end
end
end
s = s(1:num);
解答二:
clear;
clc;
V=100;
v=[60 45 35 20 20 20];
n=length(v);
v=fliplr(sort(v));
box_count=1;
x=zeros(n,n);
V_Left=100;
for i=1:n
if v(i)>=max(V_Left)
box_count=box_count+1;
x(i,box_count)=1;
V_Left=[V_Left V-v(i)];
else
j=1;
while(v(i)>V_Left(j))
j=j+1;
end
x(i,j)=1;
V_Left(j)=V_Left(j)-v(i);
end
temp=find(x(i,:)==1);
fprintf('第%d个物品放在第%d个容器\n',i,temp) end
output:
第1个物品放在第1个容器
第2个物品放在第2个容器
第3个物品放在第1个容器
第4个物品放在第2个容器
第5个物品放在第2个容器
第6个物品放在第3个容器
解答三:
function box_count=FFD(x)
%降序首次适应算法
v=100;
x=fliplr(sort(x));
%v=input('请输入箱子的容积:');
n=length(x);
I=ones(n);
E=zeros(1,n);
box=v*I;
box_count=0;
for i=1:n
j=1;
while(j<=box_count)
if x(i)>box(j)
j=j+1;
continue;
else
box(j)=box(j)-x(i);
E(i)=j;
break;
end
end
if j>box_count
box_count=box_count+1;
box(box_count)=box(box_count)-x(i);
E(i)=j;
end
end
disp(E);
在命令窗口输入:
>> x=[60,45,35,20,20,20];
>> FFD(x)
1 2 1 2 2 3
ans =
3
练习题5 “超市大赢家”提供了50种商品作为奖品供中奖顾客选择,车的容量为1000dm3, 奖品i占用的空间为w i dm3,价值为v i元, 具体的数据如下:
v i= { 220, 208, 198, 192, 180, 180, 165, 162, 160, 158,155, 130, 125, 122, 120, 118, 115, 110, 105, 101, 100, 100, 98,96, 95, 90, 88, 82, 80, 77, 75, 73, 72, 70, 69, 66, 65, 63, 60, 58,56, 50, 30, 20, 15, 10, 8, 5, 3, 1}
w i = {80, 82, 85, 70, 72, 70, 66, 50, 55, 25, 50, 55, 40, 48,50, 32, 22, 60, 30, 32, 40, 38, 35, 32, 25, 28, 30, 22, 50, 30, 45,30, 60, 50, 20, 65, 20, 25, 30, 10, 20, 25, 15, 10, 10, 10, 4, 4, 2,1}。
问如何装车才能总价值最大。
解答:
clear;
clc;
v=[220, 208, 198, 192, 180, 180, 165, 162, 160, 158,155, 130, 125, 122, 120, 118, 115, 110, 105, 101, 100, 100, 98,96, 95, 90, 88, 82, 80, 77, 75, 73, 72, 70, 69, 66, 65, 63, 60, 58,56, 50, 30, 20, 15, 10, 8, 5, 3, 1];
w=[80, 82, 85, 70, 72, 70, 66, 50, 55, 25, 50, 55, 40, 48,50, 32, 22, 60, 30, 32, 40, 38, 35, 32, 25, 28, 30, 22, 50, 30, 45,30, 60, 50, 20, 65, 20, 25, 30, 10, 20, 25, 15, 10, 10, 10, 4, 4, 2,1];
totalw=1000;limitw=1000;
n=length(w);
for i=1:n