被图论搞得死去活来,很多基础知识不熟悉,似懂非懂。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
int bin[1002];
int find(int x)//寻找根(父节点)
{
int r=x;
while(bin[r]!=r)
{
r=bin[r];
}
}
void merge(int x,int y)//使得给出的顶点有关系
{
int fx,fy;
fx=find(x);
fy=find(y);
if(fx!=fy)
{
bin[fx]=fy;
}
}
int main()
{
int n,m,x,y,count;
int i;
while(cin>>n)
{
count=-1;
if(n==0)
{
break;
}
cin>>m;
for(i=1;i<=n;i++)
{
bin[i]=i;
}
while(m--)
{
cin>>x>>y;
merge(x,y);
}
for(i=1;i<=n;i++)
{
if(bin[i]==i)
{
count++;
}
}
cout<<count<<endl;
}
return 0;
}