解释 c++ 中部分最低成本方法

Explanation for part of least cost method in c++

本文关键字:低成本 方法 c++ 中部 解释      更新时间:2023-10-16
#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. 标识行并在单元格中分配与行中最小成本对应的最大可行数量。然后在进行分配时消除该行(列(。

  3. 对减少的运输表重复步骤 1 和 2,直到将所有可用数量分配到所需位置。如果最低成本不是唯一的,则可以任意打破平局。

两张图片中的示例:第一个表

最后一个表

最小成本方法分配的成本为 35 x 5 + 35 x 7 + 30 x 4 + 7 x 7 + 43 x 7 = 890

这意味着如果 rf[i]=0 为假。

rf[p]=1 在此代码中平均行为真或无法运行因此,该行被删除。理解??