scala:Graphs的有向和无向边

时间:2015-05-18 13:34:54

标签: scala graph directed-graph undirected-graph

如果有针对性的Edge实现如下:

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

那么在我们创建新undirected Edge时实现Edge的区别是什么呢?我们在两种情况下都要说:new EdgeImpl(node1, node2)?我没有得到实施的差异:(

修改

我更具体地分析了这个example

1 个答案:

答案 0 :(得分:2)

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

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

这个例子有点复杂,并不清楚为什么真正需要描述的功能,但考虑如何创建WeightedDirectedGraph,其中每条边还包含连接节点之间的权重或距离。