2015-11-28 10 views
-2
#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]!=1C++中最低成本法的部分說明

最經濟的方法步驟:

  1. 確定運輸表的所有行中最少的成本。

  2. 確定行並在單元格中分配行中最小成本對應的最大可行數量。然後在分配時刪除該行(列)。

  3. 對於減少的運輸表重複步驟1和2,直到將所有可用數量分配到所需位置。如果最低成本不是唯一的,則可以任意打破平局。

例如在兩個圖片: first table

last table

分配的通過最少的成本方法的成本是35×5 + 35×7 + 30×4 + 7×7 + 43 x 7 = 890

回答

0

這就是說如果rf [i] = 0是假的。

rf [p] = 1平均行是真或不能在此代碼中運行 因此該行被刪除。理解??