第四周 软件工程基础结对项目3 地铁

本周的软件工程基础结对项目进入了代码实现阶段,主要任务是完成地铁遍历功能。在研究中发现,问题并非简单的旅行商问题(TSP),而是需要处理重复站点。团队利用邻接表和boost库的TSP算法找到了解决方案。在第二次结对中,讨论并实现了通过路线名列出站点的功能,采用了空间换时间的策略,提前存储路线站点信息,以提高效率。
摘要由CSDN通过智能技术生成

一、本周任务

本周开始项目的代码实现阶段。本周约结对两次。

第一次结对:

本周第一次结对讨论完成尽快遍历所有车站的功能。
对于尽快遍历所有车站,在初看要求的时候认为是普通的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)))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值