algorithm - 如何存储欧拉图结构?

标签 algorithm graph graph-algorithm

我正在解决欧拉路径问题并发现了一个问题:如何定义或存储欧拉图结构?

通常的做法是使用“伴随矩阵”,定义C[i][j]来存储i-j之间的边,简洁有效!但是这种矩阵受限于2之间的边的情况节点是唯一的(图1)。

class EulerPath
{
   int[][] c;//adjoint matrix,c[i][j] means the edge between i and j
}

如果有多个边怎么办(图2)?我的解决方案可能是使用自定义类,如“Graph”、“Node”、“Edge”来存储图,但将图划分为一些离散的结构,这意味着我们必须考虑更多的类细节,可能会损害效率和简洁性。所以我非常渴望听到您的建议!非常感谢!

class EulerPath
{
   class Graph
   {
      Node[] Nodes;
      Edge[] Edges;
   }
   class Node{...}
   class Edge{...}
}

enter image description here enter image description here

最佳答案

您可以使用邻接矩阵来存储具有多边的图。您只需将c[i][j] 的值设为顶点i 与顶点j 相邻的次数即可。在第一种情况下,它是 1,在第二种情况下,它是 3。另请参阅 Wikipedia -- 邻接矩阵并不定义为仅由 1 和 0 组成,这只是简单图的邻接矩阵的特殊情况。

编辑:您可以在邻接矩阵中表示第二个图,如下所示:

  1 2 3 4
1 0 3 1 1
2 3 0 1 1
3 1 1 0 0
4 1 1 0 0

关于algorithm - 如何存储欧拉图结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24196968/

相关文章:

algorithm - 是否有用于查找复杂多边形凸包的线性时间算法?

java - 查找包含可变数量元素的可变数量数组的排列的有效方法

html - 使用 d3 在两个节点之间绘制多条边

algorithm - 使用中间相遇的最小顶点覆盖

php - 合并并重新排序 3 个数组

xslt - 使用 XSLT 从图中剔除边

c++ - 生成随机约束图

algorithm - 来自正方形网格的多边形

c++ - 两点之间网格中的最短路径。有一个陷阱

algorithm - 在时间 O(h) 内计算 BST 中具有 key k 的条目数