动态规划----装配线调度

问题描述:

          找出通过工厂装配线的最快方式

        

程序:

#include <iostream.h>
//逆向输出路径
void print_way(int l[][6],int l1)
{
    cout<<"逆向路径为"<<l1<<" ";
    int i,t=l1-1;
    for(i=5;i>0;i--){
        cout<<l[t][i]<<" ";
        t=l[t][i]-1;
    }
    cout<<endl;
    
}
//依次输出路径
void print_way2(int l[][6],int t,int i)
{
    if(i==0)
        return ;
    else{
        if(6 == i){
        print_way2(l,t,i-1);
        cout<<t<<" "<<endl;;
        }
        else
        {
        t=l[t-1][i];
        print_way2(l,t,i-1);
        cout<<t<<" ";
        }
    
        
    }    
}
int main()
{    
    //装配站Si,j上所需要的装配时间为a[i][j] 
    int a[2][6]={{7,9,3,4,8,4},
                {8,5,6,4,5,7}};
    //把已经通过装配站si,j的底盘从装配线移走所花的时间为t[i][j] 
    int t[2][6]={{2,3,1,3,4,0},{2,1,2,2,1,0}};
    int e[2]={2,4};////底盘进入装配线i的进入时间为e[i]  
    int x[2]={3,2};//装配完成的汽车离开装配线i的离开时间为x[i] 
    int f[2][6];//f[i][j]表示一个底盘从起点到装配站si,j的最快可能时间  
    int fmin; 
    int l[2][6];//l[i][j]为装配线的编号,通过装配站si,j的最快路线的上一站在该装配线上  
    int l1;//l1为底盘离开装配线时的装配线编号  
    l[0][0]=0;
    l[1][0]=0;
    f[0][0]=a[0][0]+e[0];
    f[1][0]=a[1][0]+e[1];
    for(int i=1;i<6;i++){
        {
            if(f[0][i-1]+a[0][i]<=f[1][i-1]+a[0][i]+t[1][i-1])
            {
                f[0][i]=f[0][i-1]+a[0][i];
                l[0][i]=1;
                
            }
            else
            {
                f[0][i]=f[1][i-1]+a[0][i]+t[1][i-1];
                l[0][i]=2;
                
            }
        }
        {
            if(f[1][i-1]+a[1][i]<=f[0][i-1]+a[1][i]+t[0][i-1])
            {
                f[1][i]=f[1][i-1]+a[1][i];
                l[1][i]=2;
            }
            else
            {
                f[1][i]=f[0][i-1]+a[1][i]+t[0][i-1];
                l[1][i]=1;
                
            }
        }
    }
    if(f[0][5]+x[0]>f[1][5]+x[1]){
        fmin=f[1][5]+x[1];
        l1=2;
    }
    else
    {
       fmin=f[0][5]+x[0];
       l1=1;
     
    }
    //输出f的值
    cout<<"f[i][j]的值为"<<endl;
    for(int m=0;m<6;m++)
    {
        cout<<f[0][m]<<" ";
    }
    cout<<endl;
    for( m=0;m<6;m++)
    {
        cout<<f[1][m]<<" ";
    }
    cout<<endl;
    //输出l的值
    /*for( m=0;m<6;m++)
    {
        cout<<l[0][m]<<" ";
    }
    cout<<endl;
    for( m=0;m<6;m++)
    {
        cout<<l[1][m]<<" ";
    }
    cout<<endl<<l1<<endl;*/
   cout<<"最佳路径为"<<endl;
  // print_way(l,l1);
   print_way2(l,l1,6);
    return 0;
}

运行结果:

原文地址:https://www.cnblogs.com/sklww/p/3500020.html