问题描述:
找出通过工厂装配线的最快方式
程序:
#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; }
运行结果: