#include<bits/stdc++.h>
using namespace std;
int n,fa[105],x[105],y[105],ans;
int f(int x) {
return x==fa[x]?fa[x]:fa[x]=f(fa[x]);
}
int main() {
cin>>n;
for(int i=1; i<=n; i++) fa[i]=i;
for(int i=1; i<=n; i++) cin>>x[i]>>y[i];
for(int i=1; i<=n; i++) {
for(int j=i+1; j<=n; j++) {
if(x[i]==j[x]||i[y]==j[y]) {
int fx=f(i),fy=f(j);
if(fx!=fy) fa[fy]=fa[fx];
}
}
}
for(int i=1; i<=n; i++) if(fa[i]==i) ans++;
cout<<ans-1;
return 0;
}
对于这串代码,14行的数组和下标倒置依然可以通过编译并完成题目。
进一步地,任何一个单字母数组与单字母下标互换后都可以正常通过编译
请问是为什么?