如何在无向图中找到2条边的相等?

时间:2016-12-07 10:55:33

标签: c++ boost boost-graph

使用boost图库,我有这种类型的图表:

typedef boost::adjacency_list<
    boost::vecS,                                //OutEdgeList
    boost::vecS,                                //VertexList
    boost::undirectedS                  //Directed
> Graph;

并添加几条边:

boost::add_edge(0, 1, g);
boost::add_edge(0, 2, g);
boost::add_edge(1, 0, g);
boost::add_edge(2, 4, g);
boost::add_edge(4, 3, g);
boost::add_edge(3, 1, g);

我想检查&#34;平等&#34; 2 egdes:0-1和1-0。

我需要一个实施的起点。

谢谢

1 个答案:

答案 0 :(得分:0)

我的解决方案肯定不是最优雅的。这是我做的: 我将顶点成对放置,完成相等函数,然后检查对等。

1)将顶点与:

配对
std::pair<unsigned int, unsigned int> pairEdge( boost::numeric_cast<unsigned int>(boost::source(e, g)), boost::numeric_cast<unsigned int>(boost::target(e, g)));

2)完成相等功能

template <typename T1, typename T2>
    bool pairEquality(std::pair<T1, T2>  &lhs, std::pair<T1, T2> &rhs) {
        //standard way
        if (lhs == rhs) {
            return true;
        };

        //permutation
        std::pair<T1, T2> lhsSwap(lhs.second, lhs.first);
        if (lhsSwap == rhs) {
            return true;
        }
        return false;
    }

3)通过堆栈的for循环检查相等性