Graph 在给定顶点坐标的情况下,查找图中的所有循环基

Graph 在给定顶点坐标的情况下,查找图中的所有循环基,graph,Graph,类似的问题 我有一个顶点V和边E的无向图。我正在寻找一种算法来识别该图中的所有循环基。该图的示例如下所示: 现在,所有顶点坐标都是已知的(与前面的问题不同,与上图中的解释相反),因此可以找到包含整个图形的最小循环 在该图中,可能存在不形成任何循环的边 最好的算法是什么 下面是另一个您可以查看的示例: 假设e1是首先拾取的边,箭头显示边的方向 我还没有尝试过这个方法,它相当贪婪,但应该有效: 选择一个节点 去一家那是邻居的 继续,直到回到起始节点,但不允许访问旧节点 如果您得到一个循环,请在它

类似的问题

我有一个顶点
V
和边
E
的无向图。我正在寻找一种算法来识别该图中的所有循环基。该图的示例如下所示:

现在,所有顶点坐标都是已知的(与前面的问题不同,与上图中的解释相反),因此可以找到包含整个图形的最小循环

在该图中,可能存在不形成任何循环的边

最好的算法是什么

下面是另一个您可以查看的示例:


假设
e1
是首先拾取的边,箭头显示边的方向

我还没有尝试过这个方法,它相当贪婪,但应该有效:

  • 选择一个节点
  • 去一家那是邻居的
  • 继续,直到回到起始节点,但不允许访问旧节点
  • 如果您得到一个循环,请在它不存在或这些节点的子集组成一个循环时保存它。如果循环中的节点是另一个循环中节点的子集,则删除较大的循环(或者可能将其拆分为两个?)
  • 2点和一个新邻居重新开始
  • 使用新节点在1处重新开始
  • 注释:在第3步,你当然应该做与第2步相同的事情,所以选择所有可能的路径

    也许这是个开始?正如我所说,我还没有尝试过,所以它没有优化


    编辑:此处可以找到该算法的一个实现的未记录和未优化版本:。但是,它不能完全解决这个问题,因为它只能识别“真实”子集。

    这是一个c#问题吗?您可能会找到解决问题的通用算法。@mastoj,我已经编辑了标记。更改我的别名。。。你找到解决办法了吗?我建议的算法对你有用吗?@Thomas,不太有效。我有自己的定制解决方案。谢谢。@Thomas,假设一个节点连接到多个边,那么您如何选择使用边继续?@Ngu:没关系,您应该访问所有边。请注意,我自己还没有实现它,这是我想到的。但我认为它可以实现为某种递归算法。还要注意的是,算法没有优化,它非常贪婪。@Thomas,我的观点是,如果你面对两条边,你选择哪一条会影响你构造的面类型,所以这个问题在这里很重要。@Ngu:这就是第4步应该注意的。该算法将找到图中的所有循环,但步骤4将分割那些覆盖多个循环的循环。关于所选节点的唯一区别是,可以按不同的顺序找到面。