zoukankan      html  css  js  c++  java
  • 动态规划----装配线调度

    问题描述:

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

            

    程序:

    #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;
    }

    运行结果:

  • 相关阅读:
    Vue 报错[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders
    常用的英语词汇
    增加个人形象气质
    网络基础
    MK-编辑器
    Nexus仓库构建
    POM的配置文件
    Dubbo_Admin安装
    dubbo管理控制台安装和使用
    Dubbox监控在服务器中的安装
  • 原文地址:https://www.cnblogs.com/sklww/p/3500020.html
Copyright © 2011-2022 走看看