求一维装箱问题的 MATLAB算法,大小不同的物体如何用最少的箱子装起来,急急急:confused:
没人回复,还是我自己来吧
用MATLAB的话,循环会比较慢,还是考虑c++
以下是我参考别人的一段代码,希望对大家有帮助,也是我们做数模时使用的代码
# include <stdio.h>
# include <stdlib.h>
typedef struct ele
{ int vno;
struct ele *link;
} ELE;
typedef struct hnode
{ int remainder;
ELE *head;
Struct int hnode *next;
} HNODE;
void main()
{ int n, i, disk_count, disk_volume, *a;
HNODE *disk_h, *disk_t, *j;
ELE *p, *q;
Printf("输入软盘容量\n");
Scanf("%d",&disk_volume);
Printf("输入文件个数\n");
Scanf("%d",&n);
A=(int *)malloc(sizeof(int)*n);
Printf("请按文件大小从大到小顺序输入各文件的文件大小:");
For (i=0;i<n;i++) scanf("%d",a+i);
Disk_h=disk_t=NULL;
Disk_count=0;
For (i=0;i<n;i++)
{ p=(ELE *)malloc(sizeof(ELE));
p->vno=i;
for (j=disk_h;j!=NULL;j=j->next)
if (j->remainder>=a[i]) break;
if (j==NULL)
{ j=(HNODE *)malloc(sizeof(HNODE));
j->remainder=disk_volume-a[i];
j->head=NULL;
if (disk_h==NULL) disk_h=disk_t=j;
else disk_t=boix_t->next=j;
j->next=NULL;
disk_count++;
} 4
else j->remainder-=a[i];
for (q=j->next;q!=NULL&&q->link!=NULL;q=q->link);
if (q==NULL)
{ p->link=j->head;
j->head=p;
}
else
{ p->link=NULL;
q->link=p;
}
}
printf("共使用了%d个软盘",disk_count);
printf("各软盘装文件情况如下:");
for (j=disk_h,i=1;j!=NULL;j=j->next,i++)
{ printf("第%2d个软盘,还剩余容量%4d,所装文件有;\n",I,j->remainder);
for (p=j->head;p!=NULL;p=p->link)
printf("%4d",p->vno+1);
printf("\n");
}
}
vBulletin® v3.8.3,版权所有 ©2000-2025,Jelsoft Enterprises Ltd.