这个图中有自循环吗?如果你如何删除它并检查与另一个没有自循环的图的同构?

问题描述

大家好,我正在检查 G2 是否是 G1 的子图同构,如果我绘制它们,我可以清楚地看到同构,但如果我使用该函数,我可以为 False。有谁知道为什么?我认为原因是矩形图中的自循环,但我不知道如何删除它们

G2

G1

在python中我是这样画的:

L =[[ 0,23.4,30.3,49.45,0],[23.4,34.42,39.54,34.26,0  ],[30.3,26.67,42.71,79.12,[49.45,22.98,65.57,44.53,[ 0,43.04,23.19,47.2,30.29,29.14,64.72,24.19,60.59,49.7,39.03,46.27,40.06],44.72,62.05],30.7 ],40.06,62.05,30.7,0  ]]

A1 = np.array(L)
A2 = np.array([[0,30,[0,[30,0]])
G1 = nx.from_numpy_matrix(A1)
G2 = nx.from_numpy_matrix(A2)
GM = isomorphism.GraphMatcher(G1,G2)
print(GM.subgraph_is_isomorphic())

解决方法

这个函数 https://graspologic.readthedocs.io/en/latest/reference/utils.html#graspologic.utils.remove_loops 会给你一个没有循环的图,尽管它会返回一个邻接矩阵。如果您更喜欢在 networkx 表示上执行此操作,您可以始终遍历边并只检查源节点是否等于目标节点。

我不能谈论同构部分,我不确定你从哪里得到函数 isomorphism.GraphMatcher()

,

我注意到算法无法找到同构,因为在矩形中缺少对角边。