我得到了以下练习:有一个未加权、有向、弱连接的图,有 n 个节点(n < 1 000 000)。我们想遍历整个图,从最少的节点开始。问题是:我从哪些节点开始遍历?我找不到有关此特定主题的任何内容。但是,我设法想出了一个算法,但效率不够:
- 我将图形存储在邻接列表中(对于二维矩阵,n 可能太高)
- 我从每个节点 i 开始一个 BFS,并将它到达的节点存储在
x[i][...]
(x = List<List<int>>
) - 我检查是否有
x[i].Count == n
- 我检查是否有
(x[i] union x[j]).Count == n
- 我检查是否有
(x[i] union x[j] union x[k]).Count == n
......所以我将所有可能的 2、3、4...... x 子集的并集,并检查它的计数是否为 n。
如果 n 不太高,它可以正常工作,但我需要一个更有效的算法来获得更大的 n。
任何帮助表示赞赏(你会让我能够再次入睡)!:)