#include<bits/stdc++.h>
using namespace std;
int f[100010],n,m;
bool flag=0;
int find(int x)
{
if(x!=f[x]) f[x]=find(f[x]);
return f[x];
}
void join(int a,int b)
{
int a1=find(a),b1=find(b);
f[a1]=b1;
return;
}
int main()
{
while(1)
{
int cnt=0;
cin>>n;
if(n==0) return 0;;
cin>>m;
for(int i = 1;i<=n;i++)
f[i]=i;
if(m==0)
{
cout<<n-1<<endl;
continue;
}
while(m--)
{
int x,y;
cin>>x>>y;
join(x,y);
}
// for(int i = 1;i<=m;i++);
// {
// int x,y;
// cin>>x>>y;
// join(x,y);
// }
for(int i = 1;i<=n;i++)
if(find(i)==i)
cnt++;
cout<<cnt-1<<endl;
}
return 0;
}
为什么把while的代码改成for的代码就错了? 两个功能不是一样的吗