使用Python查找到达所有节点所需的最小顶点数的程序

使用Python查找到达所有节点所需的最小顶点数的程序

假设我们有一个有向无环图,其中有n个节点,节点从0到n-1编号,该图由边缘列表表示,其中edges[i] = (u,v)表示从节点u到节点v的有向边缘。我们必须找到最小的节点集,从该节点集中可达到图中的所有节点。(我们可以按任何顺序返回顶点)。

因此,如果输入如下所示:

使用Python查找到达所有节点所需的最小顶点数的程序

那么输出将是[0,2,3],因为这两个顶点无法从其他任何顶点到达,所以如果我们从它们开始,我们可以覆盖所有顶点。

为了解决此问题,我们将按照以下步骤进行操作:

  • n: = edges的大小

  • all_nodes:0到n的新集合

  • v:一个新的集合

  • 对于边缘中的每个(i,j),执行以下操作

    • 将j添加到v中
  • ans:从all_nodes和v中删除所有公共边缘

  • 返回答案

让我们看以下实现以更好地理解。

示例

def solve(edges):
  n = len(edges)
  all_nodes = set(range(n))
  v = set()
  for edge in edges:
     v.add(edge[1])
  ans = all_nodes - v
  return ans
edges = [(0,1),(2,1),(3,1),(1,4),(2,4)]
print(solve(edges))

输入

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

输出

{0,2,3}

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程