题目描述
原题地址:A1150 Travelling Salesman Problem
解题思路
- 用一个二维数组存储两个城市间的距离,如不存在这样的边,则距离为 0.
- 遍历每条路径,判断是否存在这样的边,如果存在,累加距离,同时更新城市访问次数。如果不存在,则修改标记另 flag = -1,表示不构成一个 cycle 并且无法计算距离。
- 判断路径的首尾城市是否一致,不一致则不能构成 cycle,修改对应标记。
- 遍历访问数组,根据所有城市是否只访问一次,判断是否为 simple TS cycle ,修改对应标记。
- 更新最短路径距离以及对应路径序号。
易错点:
- 因为起点和终点是同一个城市,对应计数值会多 1,因此需要修正。
也许陌生的知识点
vector<int> path(p);
- 创建了一个指定长度为 p 的数组。
- 所需头文件:vector
代码示例:
1 |
|