//in.txt中保存如下信息,7位边的个数
7
1 2
1 3
2 4
2 5
3 4
3 5
6 7
//out.txt中保存输出结果,如下
//完整代码如下,输入 文件请自行创建

//从一个邻接结点对文件中读出无向图的信息,向另一个文件输出最大连通分量的定点
#include<stdio.h>
#include<algorithm>
#include<string.h>
#define N 100
using namespace std;
int Tree[N];//保存根节点记录
int findRoot(int id){//并查集思想寻找一个结点的父节点
    if(Tree[id]==-1) return id;//自己就是根节点
 else{/*此处是重点*/
    int temp=findRoot(Tree[id]);
    Tree[id]=temp;//更新根节点
    return temp;
 }
}
int main(){
    FILE *fp1,*fp2;
 int a,b;//保存依次读入的顶点对
 int sum[N];//保存该根节点所在的连通分量个数
 fp1=fopen("in.txt","r");
 fp2=fopen("out.txt","w");
 int n;//读取第一行路径数
 for(int i=1;i<N;i++){
   Tree[i]=-1;//初始化均为独立根节点
   sum[i]=1;//初始联通分量个数均是1
 }
 fscanf(fp1,"%d",&n);//标准化读入数字赋值给n
 while(!feof(fp1)){
     fscanf(fp1,"%d",&a);
  fscanf(fp1,"%d",&b);
  a=findRoot(a);
  b=findRoot(b);//寻找两个节点的根节点
  if(a!=b){//如果根节点不同则合并并查集
     Tree[a]=b;//此处还可以设置累加变量记录连通分量个数
     sum[b]+=sum[a];
  }
 }
 int max=1;//记录最大连通分量的个数
 int max_id;//记录最大连通分量时的根节点id
 for(i=1;i<=n;i++){//一趟for循环找出最大连通分量的个数及其根节点id
  if(Tree[i]==-1){
   if(sum[i]>max){
      max=sum[i];
      max_id=i;
   }
  }
 }
 int record[N];
 int j=0;
 for(i=1;i<=n;i++){
    if(findRoot(i)==max_id)record[j++]=i;
 }
 record[j]=max_id;//将自身也加入记录
 //下面开始写入文件
 sort(record,record+max);//升序排列
 for(i=0;i<max;i++)
  fprintf(fp2,"%d ",record[i]);
 fclose(fp1);
 fclose(fp2);
return 0;
}


1 2 3 4 5