现在的位置: 首页 > 综合 > 正文

算法之装配线问题

2013年12月12日 ⁄ 综合 ⁄ 共 1819字 ⁄ 字号 评论关闭
  1. package com.eshore.sweetop.dynamicprogramming;
  2. //装配线问题
  3. public class Colonel {
  4.     
  5.     //1号装配线效率
  6.     int[] a1={7,9,3,4,8,4};
  7.     //2号装配线效率
  8.     int[] a2={8,5,6,4,5,7};
  9.     //1号到2号运输线
  10.     int[] t1={2,3,1,3,4};
  11.     //2号到1号运输线
  12.     int[] t2={2,1,2,2,1};
  13.     //底盘到站1时间
  14.     int e1=2;
  15.     //底盘到站2时间
  16.     int e2=4;
  17.     //完成出站1时间
  18.     int x1=3;
  19.     //完成出站2时间
  20.     int x2=2;
  21.     int[] f1=new int[a1.length];
  22.     int[] f2=new int[a2.length];
  23.     int[] l1=new int[a1.length];
  24.     int[] l2=new int[a2.length];
  25.     int f;
  26.     int l;
  27.     
  28.     
  29.     public void fastestWay(){
  30.         f1[0]=e1+a1[0];
  31.         f2[0]=e2+a2[0];
  32.         l1[0]=1;
  33.         l2[0]=2;
  34.         
  35.         for (int i = 1; i < a1.length; i++) {
  36.             if(f1[i-1]<=f2[i-1]+t2[i-1]){
  37.                 f1[i]=f1[i-1]+a1[i];
  38.                 l1[i]=1;
  39.             }else{
  40.                 f1[i]=f2[i-1]+t2[i-1]+a1[i];
  41.                 l1[i]=2;
  42.             }
  43.             if(f2[i-1]<=f1[i-1]+t1[i-1]){
  44.                 f2[i]=f2[i-1]+a2[i];
  45.                 l2[i]=2;
  46.             }else{
  47.                 f2[i]=f1[i-1]+t1[i-1]+a2[i];
  48.                 l2[i]=1;
  49.             }
  50.         }
  51.         if(f1[a1.length-1]+x1<=f2[a2.length-1]+x2){
  52.             f=f1[a1.length-1]+x1;
  53.             l=1;
  54.         }else{
  55.             f=f2[a2.length-1]+x2;
  56.             l=2;
  57.         }
  58.     }
  59.     
  60.     public void display(){
  61.         int i=l;
  62.         System.out.println("最短装配线");
  63.         System.out.println("line "+i+", station "+l1.length);
  64.         for (int j = l1.length-1; j > 0; j--) {
  65.             int[] min=null;
  66.             if(i==1){
  67.                 min=l1;
  68.             }else{
  69.                 min=l2;
  70.             }
  71.             i=min[j];
  72.             System.out.println("line "+i+", station "+j);
  73.         }
  74.     }
  75.     
  76.     public static void main(String[] args) {
  77.         Colonel c=new Colonel();
  78.         c.fastestWay();
  79.         System.out.println("最短时间:"+c.f);
  80.         c.display();
  81.     }
  82. }

抱歉!评论已关闭.