我正在尝试解决这个问题,但无法快速解决。
简而言之 - 我们有一个图(有向图),我们想找出从哪个节点(给出一组可供选择的节点)我们可以访问最多的节点。一个简单的实现是从每个节点运行 DFS/BFS,看看我们可以访问多少。但是它太慢了,因为图中有超过 5000 个节点。运行 5000 BFS/DFS 需要很长时间。
另一方面我也觉得这个问题可能与不相交集数据结构有关?但是我无法以这种方式制定它,因为在我不相交的集合实现中提到了一些提到的规则。
有人可以提示如何解决这个问题吗?
我正在尝试解决这个问题,但无法快速解决。
简而言之 - 我们有一个图(有向图),我们想找出从哪个节点(给出一组可供选择的节点)我们可以访问最多的节点。一个简单的实现是从每个节点运行 DFS/BFS,看看我们可以访问多少。但是它太慢了,因为图中有超过 5000 个节点。运行 5000 BFS/DFS 需要很长时间。
另一方面我也觉得这个问题可能与不相交集数据结构有关?但是我无法以这种方式制定它,因为在我不相交的集合实现中提到了一些提到的规则。
有人可以提示如何解决这个问题吗?
第 3 步 - 详细说明:
(为了清楚起见,我将原始图中的顶点表示为“节点”,将 SCC 图中的顶点表示为“顶点”)。
在第 3 步中,您希望找到从 SCC 的每个顶点可到达的节点数。这可以通过显式查找此集合或仅查找节点数来完成:
|A|+|B|- |A[intersection]B|
.
|A|+|B|+|C|-|A[intersrction]B| - |A[intersection]C| - |B[intersection]C + |A[intersection]B[intersection]C|