Algorithm 获取图形中的所有网格(窗口)

Algorithm 获取图形中的所有网格(窗口),algorithm,graph-algorithm,Algorithm,Graph Algorithm,我必须得到代表电路的未加权图中的所有网格列表(窗口/回路/基本电路,最短循环,共同覆盖图的所有边,没有人包含其他循环),以便对该电路进行网格分析(我可以假设它是平面图)。图形(表示为元组(A、B、R),表示两个顶点和边的阻力)从文件中加载 我将Python与NetworkX库一起使用,但它的cycle_basis函数不返回网格(它们显然与cycle basis不同)。这个图是无向的,所以我不能使用简单的函数。我试图为这个任务修改BFS,但我不能保证其他周期中不包含任何周期 我可能需要这样的东西:

我必须得到代表电路的未加权图中的所有网格列表(窗口/回路/基本电路,最短循环,共同覆盖图的所有边,没有人包含其他循环),以便对该电路进行网格分析(我可以假设它是平面图)。图形(表示为元组(A、B、R),表示两个顶点和边的阻力)从文件中加载

我将Python与NetworkX库一起使用,但它的cycle_basis函数不返回网格(它们显然与cycle basis不同)。这个图是无向的,所以我不能使用简单的函数。我试图为这个任务修改BFS,但我不能保证其他周期中不包含任何周期


我可能需要这样的东西:,但在最后的评论中,这个问题没有任何关于算法的证明,我希望我的问题的答案比“实现霍顿算法”更简单。

网格分析需要的是图形的任何特定平面图中的封闭区域列表

它比以最小周期为基础更容易找到,但得到的列表取决于使用的平面图形

如果您有一个平面图形,并且可以按顺时针或逆时针的顺序获得每个顶点的邻域,那么就很容易在这些封闭区域周围进行跟踪

否则,您可以执行以下操作:

  • 生成生成树
  • 对于不在树中的每条边,创建一个仅包含该边以及生成树中的边的循环
  • 由于每个循环都包含一条不在任何其他循环中的边,因此可以保证任何其他循环中都不包含任何循环。。。这取决于你所说的“包含”是什么意思。重要的一点是,只要你小心任何电流源,这些回路将用于分析。也许你想在生成树中避免它们


    由于您将使用这些循环生成一个方程组来求解,其中每条边都是一个变量,因此使用更复杂的算法来查找“较小”的循环可能没有什么好处。

    您可以假设图形是平面的。你已经有平面嵌入了吗?它可以使工作更容易。@MattTimmermans如果你指的是平面绘图,那么不,我不认为用这种方式绘制图形有任何用处(当然我可以)。我想分析图形并仅从数值数据中获取网格。