存在2个节点之间的连接

时间:2017-04-24 04:02:00

标签: python graph connection nodes

我想找到网络中任何2个节点之间是否存在连接,而我似乎无法理解check_connection函数中出错的地方! 请帮助!

b=0

def make_link(G, node1, node2):
  if node1 not in G:
    G[node1] = {}
  (G[node1])[node2] = 1
  if node2 not in G:
    G[node2] = {}
  (G[node2])[node1] = 1
  return G
###########为什么这个函数迭代到无穷大?
def check_connection(G, v1, v2):
  # Return True if v1 is connected to v2 in G
  # or False if otherwise

  global b

  for a in G[v1].keys():

    if a==v2:
        return True

    if b==a:
        continue

    else:
        b=v1
        check_connection(G,a,v2)
  return False

edges = [('a', 'g'), ('a', 'd'), ('g', 'c'), ('g', 'd'), ('b', 'f'), ('f', 'e'), ('e', 'h')]

G = {}

for v1, v2 in edges:
  make_link(G, v1, v2)

print check_connection(G,edges[0][0],edges[4][1])

1 个答案:

答案 0 :(得分:0)

您的图表有一个循环a-> g-> d-> a。你的功能一直在循环。您应该维护一组所有访问过的节点,而不仅仅是最近的节点,并检查是否已经访问过下一个节点。因此,将b=0更改为b=set(),将b==a更改为a in b,将b=v1更改为b.add(v1)