问个问题
查看原帖
问个问题
500240
Quirrel_dog楼主2023/3/12 20:09
#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的代码就错了? 两个功能不是一样的吗

2023/3/12 20:09
加载中...