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
相关产品推荐
相关产品推荐

