您的位置:首页 > 编程语言 > C语言/C++

Assembly-Line scheduling------code in c++

2015-04-12 18:30 465 查看
#include<iostream>
#include<cstdlib>
#include<vector>
using namespace std;

int num_of_st;

void getdata(vector<int> & v, int n)
{
if (!v.empty())
throw runtime_error("v empty");
int t;
for (int i = 0; i < n; ++i) {
cin >> t;
v.push_back(t);
}
return;
}

int main(void)
{
try{
cin >> num_of_st;
int e1, x1, e2, x2;
cin >> e1 >> x1 >> e2 >> x2;

vector<int> a1, t1, a2, t2;
cout << "st 1: " << endl;
getdata(a1, num_of_st);
getdata(t1, num_of_st-1);
cout << "st 2: " << endl;
getdata(a2,num_of_st);
getdata(t2, num_of_st-1);

//init;
vector<int> way1 , way2;
int f1 = e1+a1[0], f2 = e2 + a2[0];
way1.push_back(1); way2.push_back(2);

for (int i = 1; i < num_of_st; ++i) {
//get new f1;
int nf1;
vector<int> nway1(way1);
if (f1 + a1[i] > f2 + t2[i - 1] + a1[i]) {
nf1 = f2 + t2[i - 1] + a1[i];
vector<int>(way2).swap(nway1);
}
else
nf1 = f1 + a1[i];
nway1.push_back(1);

//get new f2;
int nf2;
vector<int> nway2(way2);
if (f2 + a2[i] > f1 + t1[i - 1] + a2[i]) {
nf2 = f1 + t1[i - 1] + a2[i];
vector<int>(way1).swap(nway2);
}
else nf2 = f2 + a2[i];
nway2.push_back(2);

//renew data.
f1 = nf1; f2 = nf2;
way1.swap(nway1); way2.swap(nway2);
}

bool from1 = f1 + x1 > f2 + x2 ? false : true;
int minT = from1 ? f1 + x1 : f2 + x2;
cout << "Min time used: " << minT << endl;
cout << "The way is: " << endl;
if (from1) {
for (vector<int>::iterator it = way1.begin();
it != way1.end(); ++it) {
cout << "Line: " << *it << ' ' << "Station " << it - way1.begin() + 1 << endl;
}
cout << endl;
}
else
{
for (vector<int>::iterator it = way2.begin();
it != way2.end(); ++it) {
cout << "Line: " << *it << ' ' << "Station: " << it - way2.begin() + 1 << endl;
}
cout << endl;
}

}
catch (exception e) {
cout << e.what() << endl;
}
cout << "Done." << endl;
system("pause");
return 0;
}


 动态规划最短路径问题:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 动态