检查图形是否是igraph中另一个图形的子图形

时间:2013-02-21 17:01:17

标签: graph igraph

我想检查给定的子图G是否是使用igraph的另一个较大图G'的子图。请注意,这不是子图同构问题,因为如果任何顶点或边的标记不同,我希望答案为False。当且仅当两个图形具有相同的边和顶点标签并且G是G'的子图时,我希望答案为真。我如何在igraph中实现这一目标?谢谢。

1 个答案:

答案 0 :(得分:1)

不确定顶点/边标签的含义,但请注意igraph中的VF2子同构算法支持顶点/边缘颜色;如果它们的颜色相同,则允许两个顶点或边匹配。如果您使用Python中的igraph,请检查subisomorphic_vf2类的Graph方法。如果您使用R中的igraph,请检查graph.subisomorphic.vf2功能。这两个都由C层中的igraph_subisomorphic_vf2函数支持。

更新:因为你有字符串作为标签而不是整数(VF2同构算法所期望的),你必须先将它们转换为整数索引。否则,VF2应该能够满足您的需求。 igraph的Python界面中的一个例子:

>>> g = Graph.Formula("A --> B --> C")
>>> g2 = Graph.Formula("A --> B")
>>> g.get_subisomorphisms_vf2(g2, color1=[0,1,2], color2=[0,1])
[[0, 1]]
>>> g.get_subisomorphisms_vf2(g2, color1=[0,1,2], color2=[0,2])
[]