%先根据载客约束和载货约束分出路径,再根据每条路径计算两项成本 fit = 0; Car = {}; temptime = 0; tempdist = 0; tempload = 0; realpath = 0; carnum = 1; %初始时第一辆车出发 realpath = [realpath,path(1)]; earlyspot = []; earlytime = []; delayspot = []; delaytime = []; temptime = temptime + timewindow(path(1),2)+worktime(path(1)); %到第一个点是正好是该点的时间窗口 tempdist = tempdist + dist(1,path(1)+1); tempload = tempload + task(path(1));
时间: 2023-08-05 09:07:06 浏览: 229
这是一段代码,它的作用是根据载客约束和载货约束将路径分成多条,并计算每条路径的成本。具体实现如下:
首先定义了一些变量,如初始路径realpath、车辆Car、时间temptime、距离tempdist、负载tempload、以及车辆编号carnum等;
然后,将起点添加到路径中,记录到realpath中,并根据起点的时间窗口和工作时间计算出temptime;
接着,从第二个点开始,循环遍历剩余的路径点,对于每个点,判断其是否能够满足载客和载货约束条件,如果能够满足,则将该点添加到当前路径中,并更新temptime、tempdist和tempload等变量;如果不能满足,则将当前路径保存到Car中,重新开启一条新路径,并将该点添加到新路径中。同时,记录下每个点的最早到达时间和延迟时间,分别保存到earlyspot、earlytime、delayspot和delaytime中;
最后,根据每条路径的时间延迟和总距离来计算路径的成本,并将成本保存到fit中。
总之,这段代码的功能是对路径进行分割,并计算每条路径的成本。
相关问题
现在要开发一个系统,管理对多种汽车的收费工作。 给出下面的一个基类框架 class Vehicle { protected: string NO;//编号 public: virtual void display()=0;//输出应收费用 } 以Vehicle为基类,构建出Car、Truck和Bus三个类。 Car的收费公式为: 载客数8+重量2 Truck的收费公式为:重量5 Bus的收费公式为: 载客数3 生成上述类并编写主函数,要求主函数中有一个基类Vehicle指针数组,数组元素不超过10个。 Vehicle *pv[10]; 主函数根据输入的信息,相应建立Car,Truck或Bus类对象,对于Car给出载客数和重量,Truck给出重量,Bus给出载客数。假设载客数和重量均为整数 输入格式:每个测试用例占一行,每行给出汽车的基本信息,每一个为当前汽车的类型1为car,2为Truck,3为Bus。接下来为它的编号,接下来Car是载客数和重量,Truck给出重量,Bus给出载客数。最后一行为0,表示输入的结束。 要求输出各车的编号和收费。 提示:应用虚函数实现多态
好的,我明白了你的问题。以下是我给出的代码示例:
```cpp
#include <iostream>
#include <string>
using namespace std;
class Vehicle {
protected:
string NO; // 编号
public:
virtual void display() = 0; // 输出应收费用
};
class Car : public Vehicle {
private:
int passengerNum; // 载客数
int weight; // 重量
public:
Car(string no, int n, int w): passengerNum(n), weight(w) {
NO = no;
}
void display() {
cout << NO << " " << passengerNum * 8 + weight * 2 << endl;
}
};
class Truck : public Vehicle {
private:
int weight; // 重量
public:
Truck(string no, int w): weight(w) {
NO = no;
}
void display() {
cout << NO << " " << weight * 5 << endl;
}
};
class Bus : public Vehicle {
private:
int passengerNum; // 载客数
public:
Bus(string no, int n): passengerNum(n) {
NO = no;
}
void display() {
cout << NO << " " << passengerNum * 3 << endl;
}
};
int main() {
Vehicle *pv[10];
int type, passengerNum, weight;
string no;
int i = 0;
while (true) {
cin >> type;
if (type == 0) break;
cin >> no;
switch(type) {
case 1:
cin >> passengerNum >> weight;
pv[i] = new Car(no, passengerNum, weight);
break;
case 2:
cin >> weight;
pv[i] = new Truck(no, weight);
break;
case 3:
cin >> passengerNum;
pv[i] = new Bus(no, passengerNum);
break;
}
i++;
}
for (int j = 0; j < i; j++) {
pv[j]->display();
delete pv[j];
}
return 0;
}
```
注释已经很详细了,这里简单介绍一下。我们定义了三个子类 Car、Truck 和 Bus,它们都继承自基类 Vehicle。同时,这三个子类都重写了基类的 display 函数,根据不同的收费公式输出应收费用。在主函数中,我们根据输入的信息创建相应的子类对象,并将它们存储在基类指针数组中。最后,我们遍历数组,调用每个对象的 display 函数输出收费信息,并释放对象所占用的内存。
现在要开发一个系统,管理对多种汽车的收费工作。 给出下面的一个基类框架 class Vehicle { protected: string NO;//编号 public: virtual void display()=0;//输出应收费用 } 以Vehicle为基类,构建出Car、Truck和Bus三个派生类。 Car的收费公式为: 载客数*8+重量*2; Truck的收费公式为:重量*5; Bus的收费公式为: 载客数*3; 生成上述类并编写主函数,要求主函数中有一个基类Vehicle指针数组,数组元素不超过10个。 Vehicle *pv[10]; 主函数根据输入的信息,相应建立Car、Truck和Bus类对象,对于Car给出载客数和重量,Truck给出重量,Bus给出载客数。假设载客数和重量均为整数。提示:应用虚函数实现多态。
下面是代码实现:
```c++
#include <iostream>
#include <string>
using namespace std;
// 车辆基类
class Vehicle {
protected:
string NO; // 编号
public:
virtual void display() = 0; // 输出应收费用
};
// 小汽车类
class Car : public Vehicle {
private:
int passengerNum; // 载客数
int weight; // 重量
public:
Car(string no, int pn, int w) : passengerNum(pn), weight(w) {
NO = no;
}
void display() {
cout << "车牌号:" << NO << ",收费:" << passengerNum * 8 + weight * 2 << "元" << endl;
}
};
// 卡车类
class Truck : public Vehicle {
private:
int weight; // 重量
public:
Truck(string no, int w) : weight(w) {
NO = no;
}
void display() {
cout << "车牌号:" << NO << ",收费:" << weight * 5 << "元" << endl;
}
};
// 巴士类
class Bus : public Vehicle {
private:
int passengerNum; // 载客数
public:
Bus(string no, int pn) : passengerNum(pn) {
NO = no;
}
void display() {
cout << "车牌号:" << NO << ",收费:" << passengerNum * 3 << "元" << endl;
}
};
int main() {
int n = 0; // 车辆数量
Vehicle* pv[10]; // 指向Vehicle对象的指针数组,最多10个元素
char type; // 车辆类型
string no; // 车牌号
int pn, w; // 载客数和重量
while (true) {
cout << "请输入车辆类型(C表示小汽车,T表示卡车,B表示巴士),按0结束:" << endl;
cin >> type;
if (type == '0') break;
cout << "请输入车牌号:" << endl;
cin >> no;
switch (type) {
case 'C':
cout << "请输入载客数和重量:" << endl;
cin >> pn >> w;
pv[n++] = new Car(no, pn, w);
break;
case 'T':
cout << "请输入重量:" << endl;
cin >> w;
pv[n++] = new Truck(no, w);
break;
case 'B':
cout << "请输入载客数:" << endl;
cin >> pn;
pv[n++] = new Bus(no, pn);
break;
default:
cout << "输入错误,请重新输入!" << endl;
break;
}
if (n == 10) break; // 最多只能输入10辆车
}
cout << "收费情况如下:" << endl;
for (int i = 0; i < n; i++) {
pv[i]->display();
}
for (int i = 0; i < n; i++) {
delete pv[i]; // 释放动态分配的内存
}
return 0;
}
```
运行程序,输入车辆信息后,将输出每辆车的收费情况。注意,如果输入的车辆数量超过10辆,则只会处理前10辆车。
阅读全文