我是不知道我当时咋想的。。。 不知道自己在想啥,
题解:
直接DFS找连通块的数量 N
然后答案是N-1
#include <bits/stdc++.h> using namespace std; int n,x[101],y[101],vis[101]; void dfs(int i) { vis[i]=1; for(int j=1;j<=n;j++) { if((x[j]==x[i]||y[j]==y[i])&&!vis[j]) { dfs(j); } } } int main() { int ans=-1; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d",&x[i],&y[i]); } for(int i=1;i<=n;i++) { if(!vis[i]) { dfs(i); ans++; } } printf("%d ",ans); return 0; }