一、本周任务
本周开始项目的代码实现阶段。本周约结对两次。
第一次结对:
本周第一次结对讨论完成尽快遍历所有车站的功能。
对于尽快遍历所有车站,在初看要求的时候认为是普通的TSP问题。
但是对该问题深入了解之后,发现了两者的区别。TSP问题是每个结点只能访问一次,且最后回到终点,由此找到最小代价。而地铁要进行遍历不可避免需要重复经历站点。为了解决该问题,引入了记录任意两点之间最小代价的邻接表MetroGraph all_pairs_shorest_graph
。该邻接表在读取文件信息后即调用get_all_pairs_shorest_graph(mtgph)
实现。
结合all_pairs_shorest_graph
和boost库中封装的TSP算法函数metric_tsp_approx_from_vertex
,获得遍历的路线。最后将路线进行处理,忽略换乘导致的同名站点,以及将sysid
对应到id
,存储在Path travel_path
,这就是函数最终返回的结果。TSP算法核心函数如下:
metric_tsp_approx_from_vertex(all_pairs_shorest_graph, src,
get(edge_weight, mtgph), get(vertex_index, mtgph),
tsp_tour_visitor<back_insert_iterator<vector<Vertex> > >
(back_inserter(travel_trail)))