C++ set数据结构在C+中的使用+;图的圈检测

C++ set数据结构在C+中的使用+;图的圈检测,c++,graph,set,C++,Graph,Set,我一直在研究一种算法来检测无向加权图中的循环。除此之外,图形没有任何自循环。我遇到的两种常用算法是 联合查找算法: 秩并与路径压缩 我正在考虑使用集合数据结构来检测图中的循环。我的做法如下: 我的申请如下: 1. Create an empty set S; 2. Visit an edge. 3. If both the source and destination vertices (connected by the undirected weighted edge in step 2) a

我一直在研究一种算法来检测无向加权图中的循环。除此之外,图形没有任何自循环。我遇到的两种常用算法是

  • 联合查找算法:
  • 秩并与路径压缩
  • 我正在考虑使用集合数据结构来检测图中的循环。我的做法如下:

    我的申请如下:

    1. Create an empty set S;
    2. Visit an edge.
    3. If both the source and destination vertices (connected by the undirected weighted edge in step 2) are there in set S, cycle is found else add both source and destination to set S and continue further till all edges are visited.
    
    见:

    在上面的表意文字链接中,在G[i].first.first和G[i].first.second之间有一个权重为G[i]的边


    请建议我的方法可能缺少的地方或情况?如果你能在我的方法中发现任何环洞,请建议

    如果图有权或没有权,循环又有什么关系?薄弱的部分可能是计算复杂性。我的第一个预感是它的
    O(E^2)
    ,不确定这是否好。我认为简单的BFS或带有访问检查的DFS有
    O(V)
    。如果你从头开始构建一个图来改变表示形式,它仍然是额外的
    O(E)
    ,所以
    O(E+V)
    。只要看看你的3步伪代码,如果图是这样的呢。节点->(1,2,3,4,5)和边以这种方式存储,并按此特定顺序逐个获取它们。边->((1,2),(2,3),(4,5),(3,4))在最后一步,您将获得并使用您访问过的2个顶点进行边,但您将错误地推断存在一个圆,因此您访问它们的顺序非常重要,并且您没有清楚地告诉您访问每个新边的顺序。@LanPac Ohh!你说得对!这是我方法中的一大缺陷@CPPCoder很乐意帮助你:D。现在我相信你有其他方法来解决这个问题。有些人已经提出了一些建议。