⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 本程序是麻省理工学院的《算法导论》上的动态规划问题
💻 CPP
字号:
#include "string.h"
#include "iostream.h"
#include "stdlib.h"
int l[3][50];
int l0,f0;
void fastestway(int n)
{
	int e1,e2,o1,o2;
	int i,j;
	int (*f)[3]=new int[n+1][3];
	int (*b)[3]=new int[n+1][3];
	int (*t)[3]=new int[n][3];
	cout<<"请输入每个站点处所需的时间:"<<endl;
	for(j=1;j<=n;j++)
	{
		cout<<"b[1,"<<j<<"]=";
		cin>>b[j][1];
		cout<<"b[2,"<<j<<"]=";
		cin>>b[j][2];
	}
	cout<<"请输入每个站离开配线的时间:"<<endl;
	for(j=1;j<n;j++)
	{
		cout<<"t[1,"<<j<<"]=";
		cin>>t[j][1];
		cout<<"t[2,"<<j<<"]=";
		cin>>t[j][2];
	}
	cout<<"每条线的输入输出时间:"<<endl;
	cout<<"e1=";
	cin>>e1;
	cout<<"e2=";
	cin>>e2;
	cout<<"o1=";
	cin>>o1;
	cout<<"o2=";
	cin>>o2;
	f[1][1]=e1+b[1][1];
	f[1][2]=e2+b[1][2];
	for(j=2;j<=n;j++)
	{
		if(f[j-1][1]+b[j][1]<=f[j-1][2]+t[j-1][2]+b[j][1])
		{
			f[j][1]=f[j-1][1]+b[j][1];
			l[1][j]=1;
		}
		else {
			f[j][1]=f[j-1][2]+t[j-1][2]+b[j][1];
			l[1][j]=2;
		}
		if(f[j-1][2]+b[j][2]<=f[j-1][1]+t[j-1][1]+b[j][2])
		{
			f[j][2]=f[j-1][2]+b[j][2];
			l[2][j]=2;
		}
		else{
			f[j][2]=f[j-1][1]+t[j-1][1]+b[j][2];
			l[2][j]=1;
		}
	}
	if(f[n][1]+o1<=f[n][2]+o2)
	{
		f0=f[n][1]+o1;
		l0=1;
	}
	else {
		f0=f[n][2]+o2;
		l0=2;
	}
	cout<<"到达每个站点的最快时间:"<<endl;
	for(i=1;i<=2;i++)
	{
		cout<<"f("<<i<<","<<"j) ";
		for(j=1;j<=n;j++)
		{
			cout<<f[j][i]<<" ";
		}
		cout<<endl;
	}
}
void output(int i,int j)
{
	if(j==0)
		return;
	output(l[i][j],j-1);
	cout<<"line"<<i<<",station"<<j<<endl;
}
void main()
{
	int n;
	cout<<"请输入装配线的站点个数:";
	cin>>n;
	fastestway(n);
	cout<<"最快通过站点的方式为:"<<endl;
	output(l0,n);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -