You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Boost Graph Library随机生成树前驱映射异常问题求助

Boost Graph Library 随机生成树前驱映射异常问题

我正在做个人项目,学习图论的同时用Boost Graph Library实现功能。我写了个函数,打算先用random_spanning_tree生成随机生成树,再随机添加部分节点连接,但现在遇到了前驱映射无法正常返回的问题。

我已经声明了前驱映射并传入random_spanning_tree函数,但输出结果完全不对。用gdb调试发现,当前的图结构只是make_connected生成的简单连通线图,而且前驱映射里大量数据都存在第0个单元中,明显是前驱映射的初始化或者传递方式有问题。折腾了快一天还是没找到原因,求各位帮忙看看。

调试时观察到:

  • 图结构仅为make_connected构建的简单连通链
  • 前驱映射的第0个单元存储了大量数据

代码实现

struct VertexData
{
    int num;
    int pred;
    int dist;
};

struct EdgeData
{
    double dist;
};

typedef adjacency_matrix<undirectedS, VertexData, EdgeData > Graph;
typedef graph_traits<Graph>::vertex_descriptor Vertex;

Graph generateConnectedGraph2(int numVertices, double connectionProbability) {
    Graph graph(numVertices);
    std::random_device rand;
    random::minstd_rand gen(rand()); // 初始化随机数生成器

    make_connected(graph);

    std::vector<double> xPos(num_vertices(graph));
    std::vector<double> yPos(num_vertices(graph));

    bool isPlanar = false;

    std::vector<Vertex> predecessor(numVertices);  // 前驱映射
    predecessor[0] = 0;  // 设置根节点为0
    // 生成随机生成树
    random_spanning_tree(graph, gen, predecessor_map(make_iterator_property_map(predecessor.begin(), get(vertex_index, graph) )));
    
    printAdjMatrix(graph, numVertices);
    
    applyPredecessorMap(graph, predecessor);
    printAdjMatrix(graph, numVertices);
    
    // 遍历节点对,随机添加边
    for (Vertex u = 0; u < numVertices; ++u) {
        for (Vertex v = u + 1; v < numVertices; ++v) {
            if (u != v && u != numVertices && !edge(u, v, graph).second && random::bernoulli_distribution<>(connectionProbability)(gen)) {
                add_edge(u, v, graph);
            }
        }
    }
    
    return graph;
}

void applyPredecessorMap(Graph& graph, const std::vector<Vertex>& predecessor) {
    int numVertices = num_vertices(graph);

    for (Vertex v = 1; v < numVertices; ++v) {
        Vertex u = predecessor[v];
        add_edge(u, v, graph);
    }
}

内容的提问来源于stack exchange,提问作者Ecinqmar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 18:57:45