城市之间有各种交通工具(汽车、火车和飞机)相连,有些城市之间无法直达,需要途径中转城市。某旅客于某一时刻向系统提出旅行要求。考虑在当前 COVID-19 疫情环境下,各个城市的风险程度不一样,分为低风险、中风险和高风险三种。系统根据风险评估,为该旅客设计一条符合旅行策略的旅行线路并输出;系统能查询当前时刻旅客所处的地点和状态(停留城市/所在交通工具)。
City 类(city.h):
class City : public QObject
{
public:
City(string name = "", int number = 0, double risk = 0);
string name; //城市名
int number; //城市序号
QPoint pos; //城市在地图上的位置
double risk; //城市风险值
void add_route(); //为该城市添加时刻表(未使用)
vector everyday_table; //每日时刻表
signals:
};
Tourist 类(tourist.h):
class Tourist
{
public:
Tourist(City* A = nullptr, City* B = nullptr, int limit = 0, int number = 0);
bool enabled; //是否启用
int number; //旅客序号
int status; //旅客状态
int stlimit; //最早出发时间
int limit; //最晚到达时间
void plan_route(int time); //为旅客规划路线
void update_status(int time); //更新旅客信息
City* start; //出发点
City* destination; //目的地
City* nowat; //当前位置
Route plan; //当前规划路径
double risk; //当前旅客所承受的风险值
void dfs(City* at, Route rut, int time); //当前所在位置 路线 当前时间 时间限制
signals:
};
Transport 类(transport.h):
class Transport
{
public:
Transport(class City* A = nullptr, class City* B = nullptr, int st = 0, double risk = 0, int cost = 0);
int transportKind; //载具种类
class City* start; //首发站
class City* destination; //终点站
int start_time; //出发时间
double risk; //风险
int time_cost; //所需时间
signals:
};
Route 类(route.h):
class Route
{
public:
Route();
vector via;
vector mid_arrive_time;
vector mid_again_time;
int transportKind;
double risk;
int start_time; //出发时间
int time_cost; //下一步到达的时间
signals:
};
旅行线路设计模块 | city.h | 城市类。保存有基本信息和以此城市为起点的时刻表。用于向旅客类提供统一的处理城市信息的结构。 |
---|---|---|
旅行线路设计模块 | tourist.h | 旅客类。保存有基本信息、更新方法和路径规划的算法。 |
旅行线路设计模块 | transport.h | 时刻表类。保存有基本信息。用于向城市类提供统一的保存时刻表信息的结构。 |
旅行线路设计模块 | route.h | 路径类。保存有基本信息和沿途所经城市。用于向旅客类提供统一的保存路径信息的结构。 |
状态动态查询显示模块 | mymap.h | 地图类。用于实现图形化,保存有通过当前信息绘制城市、旅客、交通工具的方法。用于向主窗口提供统一的更新图形化信息的结构。 |
主模块和输入输出模块 | mainwindow.h | 主窗口。保存有时间推进、处理输入信息、调用旅客更新、调用地图绘制、显示状态信息的方法。 |
范例中共计 12 个城市,64 项时刻表。路线规划均准确无误,响应迅速,没有遇到算法实现上明显的问题。具体的测试内容另附。