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