我在数据帧中有一个矩阵(5х5),每次迭代我都会向数组添加新的边,例如:
[[1,2][2,3][3,4]]
然后我再添加一个,[4,1]例如:
[[1,2][2,3][3,4],[4,1]]
但我不希望这里的边长度小于5,我怎样才能检查是否有使用python的循环?
(我只想禁止ex [4,1]以避免周期小于5)
提前感谢您的帮助!
答案 0 :(得分:1)
您所描述的已知问题称为网络连接问题。
我假设你对图论有一两件事。
我们可以轻松地遵循下一个名为快速查找的算法(适用于小边缘集)
我们的想法是将图形拆分为子集..然后我们迭代每个边条目。如果它们已经在一个子集中,那么它是循环的,如果不是它们的联合
如何表示集合 简单地说,我们将使用字典,其中键是顶点,值是子集的索引。
最初,每个顶点都在其自己的子集中,直到它与另一个顶点连接。
当我们加入两个子集时,我们只需将子集顶点的字典值更改为相同
Vertices = {}
def updateConnection(old,new):
for k,v in Vertices.items():
if v == old:
Vertices[k] = new
def unite(v1,v2):
newpid = Vertices[v1]
oldpid = Vertices[v2]
updateConnection(oldpid,newpid)
def isConnected(v1,v2):
return Vertices[v1] == Vertices[v2]
def isCyclic(Edges):
for edge in Edges:
if not edge[0] in Vertices.keys():
Vertices[edge[0]] = edge[0]
if not edge[1] in Vertices.keys():
Vertices[edge[1]] = edge[1]
if isConnected(edge[0],edge[1]):
return True
unite(edge[0],edge[1])
return False