列表向量无法复制新元素

时间:2013-11-11 23:45:51

标签: c++ algorithm list vector push-back

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

0 个答案:

没有答案