以下是并查集常见的三种操作及示例代码(使用 C++语言): ```cpp #include <iostream> using namespace std; // 查找根节点 int find(int parent[], int i) { // 如果当前节点不是根节点,递归查找根节点 if (parent[i]!= i) { parent[i] = find(parent, parent[i]); } return parent[i]; } // 合并两个集合 void unionSet(int parent[], int x, int y) { int xRoot = find(parent, x); int yRoot = find(parent, y); parent[xRoot] = yRoot; } // 初始化并查集 void makeSet(int parent[], int n) { for (int i = 0; i < n; i++) { parent[i] = i; } } int main() { int parent[10]; makeSet(parent, 10); unionSet(parent, 0, 1); unionSet(parent, 1, 2); int root = find(parent, 0); cout << "Root of 0 is: " << root << endl; return 0; } ``` 对于这段代码,需要注意以下 3 点逻辑: 1. 在查找根节点时,要通过递归确保找到最终的根节点,避免错误的合并。 2. 合并操作时,要确保将一个集合的根节点指向另一个集合的根节点。 3. 初始化操作要将每个元素都初始化为自身,形成独立的集合。 [2024-12-11 20:52:57 | AI写代码神器 | 365点数解答]