数据结构之装箱问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目]第1.2装箱问题

一.实验内容:

有一批集装箱要装上一艘载重量为的轮船。其中集装箱i的重量为w。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。

二.实验目的:

任意的c及任意的集装箱没,输出最优解。

三.实验设计思想:

根据题目,要求在不超过重量的前提下,尽可能多的装入更多的集装箱,因而我们可以采用贪婪算法,先按集装箱的重量大小将集装箱从小到大进行排序,然后在按从小到大的次序一个一个装上轮船,我们采用一维数组,用线性表的顺序存储结构保存每个集装箱重量的值,接着我们先用直接选择法对集装箱进行排序,然后我们便可以很容易的实现先装入重量轻的货物了,也就可以达到尽可能多的装入货物的目的了。

程序的框架和流程图:

(1)定义常量max;

(2)编写直接选择法排序的函数sort();

(3)编写选择集装箱的函数select();

(4)编写主函数,先输入货船的最大载重量,然后输入集装箱的总数和每个集装箱的重量,调用排序函数sort()和选择函数select()输出最优解。

Sort()函数的流程图:

定义i ,j,k,temp

i=0

i

k=i

j=i+1

j

w[j]

temp=w[k];

w[k]=w[i];

w[i]=temp;

j++

i++

END

Select()函数的流程图:

定义i,s=0

i=0

i

s+=w[i]

s

打印w[i]

break

i++

return i

END

main函数流程图:

定义a[max],x,n,c,i=0,s

打印输入信息,输入c,n的值

输入x

a[i]=x

i++

i

调用sort();

调用select();

打印输出信息

END

四.程序的源代码:

#include

#define max 10000

void sort(int *w,int n)//对集装箱进行直接选择排序{int i,j,k,temp;

for(i=0;i

{k=i;

for(j=i+1;j

if(w[j]

temp=w[k];

w[k]=w[i];

w[i]=temp;

}

}

int select(int *w,int n,int c)//挑选轻的集装箱先上船,c为载重量,w为排完序的集装箱 {int i,s=0;

for(i=0;i

{s+=w[i];

if(s<=c)printf("%d ",w[i]);

else break;

}

return i;

}

void main()

{

int a[max];

int x;

int n; //箱子的个数

int c; //船的载重量

int i=0;

int s;

printf("请输入货船的载重量c:\n");

scanf("%d",&c);

printf("请输入箱子的个数n:\n");

scanf("%d",&n);

printf("请输入所有每个的箱子的重量:\n");

do{

scanf("%d",&x);

*(a+i)=x;

i++;

}while(i

sort(a,n);//排序

printf("装入货船的箱子如下所示:");

s=select(a,n,c);//选轻的上船

printf("\n最后装入船的箱子总数s:");

printf("%d\n",s);

}

五.程序的使用方法:

以10个集装箱为例,一开始会提示“请输入货船的载重量c:”操作人输入货船的载重量,然后提示“请输入箱子的个数n:”操作人输入集装箱的总个数,接着又会提示“请输入所有每个的箱子的重量:”操作者输入每个集装箱的重量,每输入一个用回车间隔,待输入数目达到定义的数目10时,程序就会给出装箱的选择和装上货船的集装箱总数,至此,对任意的c及任意的集装箱,输出最优解的任务完成。

六.程序的测试结果:

请输入货船的载重量c:

100

请输入箱子的个数n:

10

请输入所有每个的箱子的重量:

3 6 23 11 7 9 10 3

4 31 29

装入货船的箱子如下所示:3 6 7 9 10 11 23 29

最后装入船的箱子总数s:8

Press any key to continue

七.程序设计心得:

通过课程设计的过程,巩固和了解了线性表顺序存储结构的排序算法,加深了对数据结构的理解和认识。同时也了解到数据结构同我们的日常生活息息相关,算法的思想将对我们今后的生活的工作有所帮助。

相关文档
最新文档