在Python中检查图形中是否存在任何可达的共同节点的程序

在Python中检查图形中是否存在任何可达的共同节点的程序

假设我们有一个有向图的边缘列表,有n个节点,节点名称为0到n-1。 我们还有两个整数值a和b。 我们必须检查是否存在任何节点c,使得我们可以从c到a,也可以从c到b。

因此,如果输入为

在Python中检查图形中是否存在任何可达的共同节点的程序

且a = 2,b = 3,则输出为True,因为在这里c = 0,因此我们有从0到2和0到3的路线。

为了解决这个问题,我们将遵循以下步骤 –

  • 定义一个函数DFS()。 这将取图,节点,已访问
  • 如果节点未被访问,则
    • 将节点标记为已访问
    • 针对graph[node]中的每个x执行以下操作
      • DFS(graph,x,visited)
  • 从主要方法中执行以下操作 –
  • 图:=从edge_list生成邻接列表
  • visited_a,visited_b:=两个空集合
  • DFS(graph,a,visited_a)
  • DFS(graph,b,visited_b)
  • ans:=从visited_a和visited_b的相交处中获取新列表
  • 如果ans不为空,则
    • 返回True
  • 返回False

示例

让我们看下面的实现以更好地理解 –

def edge_list_to_graph(edges):
   s = set()
   for x, y in edges:
      s.add(x)
      s.add(y)
   s = len(list(s))
   graph = [[] for x in range(s)]
   for x, y in edges:
      graph[y].append(x)
   return graph

def DFS(graph, node, visited):
   if node not in visited:
      visited.add(node)
      for x in graph[node]:
         DFS(graph, x, visited)

def solve(edges, a, b):
   graph = edge_list_to_graph(edges)

   visited_a, visited_b = set(), set()

   DFS(graph, a, visited_a)
   DFS(graph, b, visited_b)

   ans = list(visited_a.intersection(visited_b))
   if ans:
      return True
   return False

ed_list = [(0, 4),(4, 3),(1, 2),(0, 1),(0, 2),(1, 1)]
a = 2
b = 3
print(solve(ed_list, a, b))

输入

[(0, 4),(4, 3),(1, 2),(0, 1),(0, 2),(1, 1)], 2, 3

输出

True

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程