解释 c++ 中部分最低成本方法
Explanation for part of least cost method in c++
#include<iostream>
using namespace std;
int main(){
int c[20][20],
i,j,
min, m, n, b, d, c2, c1, p, q;
int dem[20],sup[20],rf[20],cf[20],sum=0;
cout<<"n number of Row: ";
cin>>m;
cout<<"n number of columns: ";
cin>>n;
cout<<"n Cost: n"; //matrix
for(i=0;i<m;i++)
{
for(j=0; j<n; j++)
{
cout<<" Cost Matrix : "<<(i+1)<<(j+1);
cin>>c[i][j];
}
}
cout<<"n Demand: n";
for(i=0; i<n; i++){
cout<<" Demand [ : "<<(i+1);
cin>>dem[i];
}
cout<<"n Supply: n";
for(i=0; i<m; i++){ //
cout<<" Supply : "<<(i+1);
cin>>sup[i];
}
cout<<"n Matrix:n";
for(i=0; i<m; i++){
for(j=0; j<n; j++)
cout<<" %d | "<<c[i][j];
cout<<"%d "<<sup[i];
cout<<"n";
}
for(j=0; j<n; j++)
cout<<"%d "<<dem[j];
for(i=0; i<m; i++)
rf[i]=0;
for(i=0; i<n; i++)
cf[i]=0;
b=m;
d=n;
while(b>0 && d>0)
{ min=1000;
for(i=0; i<m; i++)
{ if(rf[i]!=1)
{ for(j=0; j<n; j++)
{ if(cf[j]!=1)
{ if(min>c[i][j])
{ min=c[i][j];
p=i;
q=j;
}
}
}
}
}
if(sup[p] < dem[q])
c1=sup[p];
else
c1=dem[q];
for(i=0; i<m; i++)
{ if(rf[i]!=1)
{ for(j=0; j<n; j++)
{ if(cf[j]!=1)
{ if(min==c[i][j])
{ if(sup[i]<dem[j])
c2=sup[i];
else
c2=dem[j];
if(c2>c1)
{ c1=c2;
p=i;
q=j;
}
}
}
}
}
}
//cout<<"n %d %d %d ",min,p,q);
if(sup[p]<dem[q])
{ sum+=c[p][q]*sup[p];
dem[q]-=sup[p];
rf[p]=1;
b--;
}
else
if(sup[p]>dem[q])
{ sum=sum+c[p][q]*dem[q];
sup[p]-=dem[q];
cf[q]=1;
d--;
}
else
if(sup[p]==dem[q])
{ sum=sum+c[p][q]*sup[p];
rf[p]=1;
cf[q]=1;
b--;
d--;
}
//cout<<"n %d",sum);
}
cout<<"nn total cost %dnn"<<sum;
system("pause");
}
此代码适用于成本最低的方法。我不明白rf[i]
和cf[i]
的工作是什么,为什么rf[i]!=1
最低成本方法步骤:
确定运输表的所有行中成本最低的行。
标识行并在单元格中分配与行中最小成本对应的最大可行数量。然后在进行分配时消除该行(列(。
对减少的运输表重复步骤 1 和 2,直到将所有可用数量分配到所需位置。如果最低成本不是唯一的,则可以任意打破平局。
两张图片中的示例:第一个表
最后一个表
最小成本方法分配的成本为 35 x 5 + 35 x 7 + 30 x 4 + 7 x 7 + 43 x 7 = 890
这意味着如果 rf[i]=0 为假。
rf[p]=1 在此代码中平均行为真或无法运行因此,该行被删除。理解??
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 为什么 C++ 中指向方法取消引用运算符的指针具有如此低的优先级
- 将两位数字转换为低内存表示的最快方法
- 如何在C++的低优先级线程中运行方法
- 具有较低系统时间的C++时序方法
- 将 rvalue/temp 对象传递给需要非成本引用的函数的任何方法
- 除了繁忙的等待之外,还有其他处理器密集度较低的方法来限制调用函数的速度吗
- QPainter或QLabel绘制QPixmap的成本较低
- 区域设置特定于boost区域设置的低成本问题
- 开源或低成本的跨平台视频编解码器库,可用于商业目的,并支持RGBA格式
- 在一个位置或更低的位置上计数集位的有效方法是什么?< / h1 >
- C++:我如何计算一种方法的成本(算法分析)
- 在虚拟继承中调用非虚拟基方法是否有任何额外的成本
- 将有符号整数转换为二进制浮点数,比反运算成本低
- 解释 c++ 中部分最低成本方法
- 使用移动成本低但复制量大的对象初始化容器的首选方法是什么
- 将双精度值舍入到(稍微)较低精度的好方法是什么?
- 调用非虚拟基方法时,C++中是否存在虚拟继承的惩罚/成本