我的目标是通过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
。