题目描述:
某学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友”这个推论可以得出,如果A和B是朋友,且B和C是朋友,则A和C也是朋友。请编写程序计算最大朋友圈中有多少人。
输出格式:
输出给出一个整数,表示在最大朋友圈中有多少人。
输入样例:
7 4 3 1 2 3 2 1 4 3 5 6 7 1 6
输出样例:
4
解析:这是关于搜索的算法的题目。
代码:
#include<stdio.h>
#include<stdlib.h>
int vis[100];
int rot[100]={0};
int getRoot(int h){
if(vis[h]==h)return vis[h];
vis[h]=getRoot(vis[h]);
return vis[h];
}
void root(int a,int b){
int y=getRoot(b);
int x=getRoot(a);
if(x!=y)vis[x]=y;
}
int main(){
int n,m,x,y,s,i,j;
//printf("请输入所有的人数和组数:");
scanf("%d %d",&n,&m);
for(i=0;i<n;i++){
vis[i]=i;
}
for(i=0;i<m;i++){
scanf("%d %d",&x,&y);
for(j=1;j<x;j++){
scanf("%d",&s);
root(y,s);
}
}
int mann=0;
for(i=0;i<n;i++){
int t=getRoot(i);
rot[t]++;
if(rot[t]>mann)mann=rot[t];
}
printf("请输出最值:%d",mann);
return 0;
}
|