小编Dan*_*iel的帖子

使用boost图库检测无向图中的循环

我从昨天开始就被这个问题困住了。不幸/幸运的是,这个问题只占我超级庞大(对我来说,一个 c++ 新手)算法的 0.5% 左右,因此需要一个现有代码库,一个可以适应并让事情正常工作的现有代码库。

我想检测并给出无向图中的所有圆圈。我的边缘没有加权。是的,我真正需要的是所有循环,即类似于有向图的所有哈密顿循环

我一直在玩boost图库,DFS算法似乎很有前途,但是,它只访问顶点一次,因此不能给出所有的哈密顿圆。

目前,我只需要代码工作,这样我就可以继续我的算法设计,之后我可能会考虑性能问题。即使是带有 5 个嵌套 for 循环的解决方案也是受欢迎的。

这是我从 boost 得到并玩过的代码,但我不知道如何记录和访问我的 back_edges 的前辈,即使解决了,boost DFS 也只会访问顶点一次:

struct detect_loops : public boost::dfs_visitor<>
{
   template <class Edge, class Graph>
   void back_edge(Edge e, const Graph& g) {
      std::cout << source(e, g)
        << " -- "
        << target(e, g) << "\n";
   }
};

int main(int,char*[])
{
    typedef std::pair<int,int> Edge;
    std::vector<Edge> edges;
    edges.push_back(Edge(0,1));
    edges.push_back(Edge(1,2));
    edges.push_back(Edge(2,3));
    edges.push_back(Edge(3,1));
    edges.push_back(Edge(4,5));
    edges.push_back(Edge(5,0));
    edges.push_back(Edge(4,0));
    edges.push_back(Edge(5,6));
    edges.push_back(Edge(2,6));

    typedef adjacency_list<
       vecS, vecS, undirectedS, no_property,
       property<edge_color_t, default_color_type>
    > graph_t;
    typedef …
Run Code Online (Sandbox Code Playgroud)

boost boost-graph hamiltonian-cycle

5
推荐指数
0
解决办法
5262
查看次数

标签 统计

boost ×1

boost-graph ×1

hamiltonian-cycle ×1