2016-12-07 14 views
1

使用boost圖形庫,我有這種類型的圖表:如何找到無向圖中兩條邊的相等性?

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

你覺得爲什麼環你需要它?你可以使用'boost :: setS'作爲OutEdgeList,並且不會出現重複。 – 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)檢查通過平等堆棧