0

我的目标是通过 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_pathsshortlist我调用push_back. 的最终尺寸priority_paths是正确的,但唯一的非空元素是最后shortpath添加的。

4

0 回答 0