#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define MAX 20
typedef struct Item
{
double w; //集装箱重量
int index; //集装箱下标
}Item;
Item item[MAX]; //集装箱
double x[MAX]; //x[i]表示是否装入,装入为1,不装入为0
int cmp(const void *item1, const void *item2) //对集装箱按重量升序
{
if((*(Item *)item1).w > (*(Item *)item2).w)
return 1;
else
return 0;
}
//返回轮船所装集装箱最大个数
//n为集装箱总数
//c为轮船可装总重量
int Loading(int n, double c)
{
qsort(item, n, sizeof(Item), cmp); //将集装箱按重量升序
memset(x, 0, sizeof(x)); //初始化解向量空间
int i;
int count = 0;
for(i=0; i<n && item[i].w<c; i++) //如果集装箱可以装船
{
x[i] = 1; //装入
c -= item[i].w; //可装重量减少
count++;
}
return count;
}
int main()
{
int n = 4;
double c = 70;
double w[] = {20, 10, 26, 15};
int i;
for(i=0; i<n; i++)
{
item[i].w = w[i];
item[i].index = i+1;
}
printf("轮船载重为:%.2f\n", c);
printf("现有的集装箱为:\n");
for(i=0; i<n; i++)
{
printf("集装箱%d(%.2f)\n", item[i].index, item[i].w);
}
printf("\n\n");
int u = Loading(n, c);
printf("轮船所装集装箱的个数最大为: %d\n", u);
printf("所选的集装箱为:\n");
for(i=0; i<n; i++)
{
if(x[i])
printf("集装箱%d(%.2f)\n", item[i].index, item[i].w);
}
printf("\n");
return 0;
}
最优装载
最新推荐文章于 2022-10-21 23:13:58 发布