scala:图的有向和无向边

scala: directed and undirected edges of Graphs

如果有向边的实现类似于:

class EdgeImpl(origin: Node, dest: Node) {
    def from = origin
    def to = dest
  }

那么实现 undirected Edge 的区别是什么,而当我们创建一个新的 Edge 时,我们还必须在这两种情况下说:new EdgeImpl(node1, node2)?我没有得到实施上的差异:(

编辑

我正在更具体地分析这个 example

Edge 的实现没有真正的区别,在这两种情况下,只需要指定两个连接的节点。

当你想要实现边的含义需要解释的其他东西时,差异就会弹出。例如,如果您有一个方法 areConnected(a: Node, b: Node): Boolean,那么它的实现将遍历边列表,如果在有向图中,如果 from == a && to == b 则 return 为真。无向版本将改为计算 (from == a && to == b) || from == b && to == a)

该示例有点令人费解,并没有说明为什么真正需要所描述的功能,但请考虑例如如何创建一个 WeightedDirectedGraph,其中每条边还包含连接节点之间的权重或距离。