基本上,除了检查顶点 u 和 v 是否不在同一个组件中之外,我还试图通过添加一个条件来修改 Kruskal 的算法。我隐约了解 union-find 数据结构的工作原理,所以我想检查一下我是否真的得到了正确的想法。
鉴于我有一个无向图 G = (V, E) 和一个包含 V 中的一些顶点的集合 A(顶点 A ⊂ V 的子集),我想捕获 V 中每个顶点 u 的实例(循环) ,你也在这个集合A中找到。我正在考虑使用:
(Full Kruskal's algorithm omitted)
original_comp = make_sets(V)
A_comp = make_sets(A)
for each edge (u, v) in E:
if (find(original_comp, u) == find(A_comp, u)):
// do something
这会因为设置参数不同(因此标签不同)而不起作用吗?我只是想确认...
为了澄清,我需要知道一条边 (u, v) 是否包含集合 A 中的一个顶点。我试图使用 Union-Find 来实现这一点(因为 find() 需要 O(1) 时间),而不是遍历集合 A 来比较每个元素......谁能告诉我这是否可能?还是我应该只使用数组遍历方法?
谢谢你。