我的目标是通过 Dijkstra 算法找到从图中每个节点到其他节点的最短路径,包括彼此不同的等长路径。为了存储这些路径,每个节点都有一个用于图中每个其他节点的向量,该向量存储一个包含每个最小路径的列表向量(通常只有一个列表,但如果存在多个最短路径,有时会更多)。每个节点都有一个这些数据结构,一个向量包含所有这些数据结构 - 所以一个向量向量是一个列表向量。
第二个目标是详尽地使用最短路径列表而不是边接边来解决 TSP 问题。
因此,作为算法的一部分,我试图将一个节点的所有列表收集到一个列表向量中。换句话说,我正在尝试将列表的二维向量转换为列表的一维向量。
我在二维向量中找到的每个列表都尝试推入一维向量。发生的情况是第一个列表正确复制所有元素,但以下尝试推送列表会添加一个空列表。否则代码编译并正确执行。
vector<vector<vector<list<road_data>>>> all_shortest_paths;
...
...
...
int ex_path_search(int current_city, int current_distance, int best_distance) {
vector<list<road_data>> priority_paths;
for(int i = 0; i < all_shortest_paths[current_city].size(); i++) {
for(int j=0; j<all_shortest_paths[current_city][i].size(); j++) {
//an attempt to fix the dysfunctional copy by making a separate list first
list<road_data> shortpath = all_shortest_paths[current_city][i][j];
//first iteration copies correctly, each following iteration copies an empty list
priority_paths.push_back(shortpath);
}
}
all_shortest_paths 结构是非空的,除了对应于它所属节点的边列表。我已经验证了所有最短路径算法都有效,但即使没有,它们应该在的任何地方都有列表。
我一直试图弄清楚这一点。我尝试使用列表列表代替具有相同结果的向量。以上shortpath
复制时是非空的,但是当我尝试将其推入时,priority_paths
只会出现一个空列表。有什么建议么?
编辑:priority_paths
当shortlist
我调用push_back
. 的最终尺寸priority_paths
是正确的,但唯一的非空元素是最后shortpath
添加的。