如何用Tcllib :: struct :: graph做超图

时间:2018-03-18 18:16:08

标签: tcl

我的Tcl应用程序将使用hypergraph,即具有单开始多端或仅有多端的边。查看可用的实时实现,我看到:: struct :: graph作为潜在的替代方案。然而,它似乎仅限于单启动单端。

在:: struct :: graph中是否有一种(最好是微不足道的)表达超边的方法?如果没有,我怎么能扩展:: struct :: graph?

(...也许有一个比:: struct :: graph更好的解决方案?)

2 个答案:

答案 0 :(得分:1)

  在中表达超边的

(最好是琐碎的)方式

不是微不足道的,也不一定足够:我现在唯一能想到的就是使用弧的属性来存储额外的源和目标对,给定的,好的,夸大其词:

struct::graph myHyperGraph
myHyperGraph node insert node0
myHyperGraph node insert node1
myHyperGraph node insert node2
myHyperGraph node insert node3
myHyperGraph arc insert node0 node1 harc0
myHyperGraph arc lappend harc0 ends [list node0 node2]
myHyperGraph arc lappend harc0 ends [list node0 node3]

基于这种捎带,一些处理操作应该是合理的努力,例如,在一个关联矩阵中。

答案 1 :(得分:0)

发布我的一些进展和想法,允许人们发表评论。

我倾向于发明“中心节点”。

每当需要超边界时,我都会让所有参与节点都有边缘到集线器。对于一对多的超边缘,我会添加一个集线器,从起始节点到集线器添加一条边,然后从集线器到终端节点各添加一条边。对于多对多,我会添加一个集线器,然后为所有参与节点添加边。边缘的方向会影响walk的工作方式。我不确定该选择什么,但它很简单,以后再决定。

deletewalk命令可以很好地工作。唯一的问题是当一个中心节点被删除后,它会消失,但我相信这是微不足道的。

相关问题