用并查集,没有用搜索的方式。中途犯了一点小错误
#include <stdio.h>
#include <unistd.h>
#include <string.h>
using namespace std;
#define LEN 1010
int p[LEN], x[LEN], y[LEN];
void init() {
int i;
for(i = 0; i < LEN; i++) {
p[i] = i;
}
}
int find(int x) {
return p[x] == x ? x : (p[x] = find(p[x]));
}
int main() {
int n;
while(scanf("%d", &n) != EOF) {
int i, j;
init();
for(i = 1; i <= n; i++) {
scanf("%d%d", &x[i], &y[i]);
for(j = 1; j < i; j++) {
if(x[i] == x[j] || y[i] == y[j]) {
int p1 = find(i);
int p2 = find(j);
p[p2] = p1;
}
}
}
int ans = 0;
for(i = 1; i <= n; i++) {
if(p[i] == i) {
++ans;
}
}
printf("%d\n", ans-1);
}
return 0;
}