2016-12-07 7 views
1

ブーストグラフライブラリを使用して、私はグラフのこのタイプがあります。無向グラフの2つのエッジの等価性を見つけるには?

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

を、いくつかの2辺を追加:

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); 

私は2 egdesの "平等" をチェックしたい:0-1 1-0である。

私は実装の出発点が必要です。

ありがとうございました

+0

のforループによる平等をチェックします君はそれが要る? OutEdgeListに 'boost :: setS'を使うだけで、重複は起こりません。 – sehe

答えて

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平等機能を完了)だと思いますなぜスタック

関連する問題