如何使用Tcllib::struct::graph创建hypergraph

如何使用Tcllib::struct::graph创建hypergraph,tcl,Tcl,我的Tcl应用程序将使用一个,即具有单起点多终点或多终点的边缘。查看可用的实时实现,我认为::struct::graph是一个潜在的替代方案。然而,它似乎仅限于单起点单终点 在::struct::graph中是否有一种表达超边的简单方法?如果没有,我如何扩展::struct::graph …也许有比::struct::graph更好的解决方案 最好是在::struct::graph中表达超边的简单方法 不平凡,也不一定足够:我现在唯一能想象的是使用弧的属性为给定的超边存储额外的源和目标对: st

我的Tcl应用程序将使用一个,即具有单起点多终点或多终点的边缘。查看可用的实时实现,我认为::struct::graph是一个潜在的替代方案。然而,它似乎仅限于单起点单终点

在::struct::graph中是否有一种表达超边的简单方法?如果没有,我如何扩展::struct::graph

…也许有比::struct::graph更好的解决方案

最好是在::struct::graph中表达超边的简单方法

不平凡,也不一定足够:我现在唯一能想象的是使用弧的属性为给定的超边存储额外的源和目标对:

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]

基于这种背驮,一些处理操作应该可以通过合理的努力完成,例如,进入关联矩阵。

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

我倾向于发明中心节点

每当需要超边时,我都会使所有参与节点都有到中心的边。对于一对多超边,我将添加一个中心,从开始节点到中心添加一条边,然后从中心到结束节点各添加一条边。对于多对多,我将添加一个中心,然后向所有参与节点添加边。边的方向会影响漫游的工作方式。我不确定该选择什么,但这很简单,以后再决定


delete和walk命令将很好地工作。唯一的问题是在移除中心节点的最后一条边时使其消失,但我相信这是微不足道的。

有趣的问题。我不知道有一个支持hypergraph的Tcl扩展提供了一个定制的数据结构来表示它们。请您详细说明一下:在您的应用程序中,hypergraph的Tcl表示法的具体用途是什么?可视化、优化问题、图形/网络分析?@Calvin Visualization先生。我认为多边形应该是渲染时使用的边的属性。为什么要附加到harc0两次?补充了我自己的想法作为答案