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

时间:2015-11-28 15:55:07

标签: c++ optimization

#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<<"\n\n total cost %d\n\n"<<sum;
  system("pause");
}

此代码用于成本最低的方法。我不明白rf[i]cf[i]的工作是什么,为什么rf[i]!=1

最低成本方法步骤:

  1. 确定运输表所有行中的最低成本。

  2. 标识行并在单元格中分配对应于行中最低成本的最大可行数量。然后在进行分配时消除该行(列)。

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

  4. 两张图片中的示例: first table

    last table

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

1 个答案:

答案 0 :(得分:0)

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

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