我是靠谱客的博主 单薄刺猬,最近开发中收集的这篇文章主要介绍最小机器重量 分支限界,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#include <stdio.h>
#include <stdlib.h>
int bottom,Flag2;
int COST,n,m,*bestx;
int cc,cw,w[100][100];
int cp,c[100][100];
int bestw=1000;
int Flag;
int E;
int bext[100];
int bestxulie[100],sum;
//using namespace std;
struct Heapnode
{
int profit;
int weight;
int
level;
int prt;
int current;
};
struct Heapnode H[100];
struct Heapnode N;
void DeleteMin()
{
N.level=H[bottom].level;
N.profit=H[bottom].profit;
N.prt=H[bottom].prt;
N.current=H[bottom].current;
N.weight=H[bottom].weight;
bottom++;
}
void Insert()
{
H[Flag].level=N.level;
H[Flag].profit=N.profit;
H[Flag].prt=N.prt;
H[Flag].current=N.current;
H[Flag].weight=N.weight;
Flag++;
}
void AddLiveNode(int cp,int cw,int i,int j)
{
N.profit=cp;
N.weight=cw;
N.level=i;
N.current=j;
N.prt=Flag2;
Insert();
}
int MinWeightMachine()
{
int i=1,j,wt=0,ct=0;
cw=0;
cp=0;
int besTypep=0;
while(1)
{
for(j=1; j<=m; j++)
{
wt=cw+w[i][j];
ct=cp+c[i][j];
if(ct<=COST&&i<=n)
{
if(i==n)
{
int k;
if(wt<bestw)
{
bestw=wt;
for(k=1; k<n-1; k++)
bestxulie[k]=bext[k+2];
bestxulie[n]=j;
for(k=1; k<n-1; k++)
sum+=w[k][bestxulie[k]];
sum+=w[n][j];
for(k=1; k<=n; k++)
{
if(w[n-1][k]==(bestw-sum))
bestxulie[n-1]=k;
}
}
}
else
AddLiveNode(ct,wt,i+1,j);
}
}
if(bottom==Flag)
break;
DeleteMin();
cw=N.weight;
cp=N.profit;
i=N.level;
Flag2=N.current;
bext[i]=N.prt;
}
return bestw;
}
int main()
{
int i,j;
scanf("%d%d%d",&n,&m,&COST);
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
scanf("%d",&c[i][j]);
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
scanf("%d",&w[i][j]);
printf("最小重量为:n");
printf("%dn",MinWeightMachine());
printf("每个物品对应的供应商为:n");
for(i=1; i<=n; i++)
printf("%d
",bestxulie[i]);
return 0;
}

 

转载于:https://www.cnblogs.com/difei/p/3717960.html

最后

以上就是单薄刺猬为你收集整理的最小机器重量 分支限界的全部内容,希望文章能够帮你解决最小机器重量 分支限界所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部