2016-12-07 37 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)检查通过平等堆栈

相关问题