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,其中每条边还包含连接节点之间的权重或距离。
如果有向边的实现类似于:
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,其中每条边还包含连接节点之间的权重或距离。