使用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。
我需要一个实施的起点。
谢谢
答案 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循环检查相等性