您的位置:首页 > 编程语言 > C语言/C++

OpenJudge百炼习题解答(C++)--题4109:公共朋友-Common Friends

2016-02-20 22:39 309 查看

题:

总时间限制:1000ms 内存限制:65536kB
描述
小明和小红去参加party。会场中总共有n个人,这些人中有的是朋友关系,有的则相互不认识。朋友关系是相互的,即如果A是B的朋友,那么B也是A的朋友。小明和小红想知道其中某两个人有多少个公共的朋友。

输入第一行为一个正整数c,代表测试数据的个数。接下来是c组测试数据。

对于每组测试数据,第一行是三个数字n(2<=n<=100),m和k,分别表示会场中的人数,已知的朋友关系数目,问题的数目。接下来的m行,每行用两个数字i和j(1<=i,j<=n)表示了一个朋友关系,表示第i个人和第j个人是朋友关系。接下来的k行,每行用两个数字i和j(1<=i,j<=n)表示一个问题,请问第i个人和第j个人有多少公共的朋友。输出对于第i组测试数据,首先输出一行”Case i:”,接下来得k行代表了k个问题,每行输出第i个人和第j个人有多少公共的朋友。样例输入:

样例输出:



解:

#include<stdio.h>
int FindCommonF(int K1,int K2,int ia[100][101],int ja[100][101],int Nu,int c);
int main()
{
	int C;
int n;

	scanf("%d",&C);
	int k[C];
	int m[C];
	int i[100][101];
	int j[100][101];
	
	int InputK1[C][101];
	int InputK2[C][101];
	for(int hh=0;hh<C;hh++)
	{
		for(int uu=0;uu<101;uu++)
		{
			j[hh][uu]=0;
			i[hh][uu]=0;
			InputK1[hh][uu]=0;
			InputK2[hh][uu]=0;
		}
	}
	
	
	
	for(int a=0;a<C;a++)
	{
	       scanf("%d %d %d",&n,&m[a],&k[a]);
	       int ii=0;
	for(ii=0;ii<m[a];ii++)
	{
		scanf("%d %d",&i[a][ii],&j[a][ii]);
		
	}
	
	
	
	int jj=0;
	for( jj=0;jj<k[a];jj++)
	{
		scanf("%d %d",&InputK1[a][jj],&InputK2[a][jj]);
		
	}
		
	}
	
	for(int b=0;b<C;b++)
	{
		printf("Case %d:\n",b+1);
		
		for(int kk=0;kk<k[b];kk++)
		{
			printf("%d\n",FindCommonF(InputK1[b][kk],InputK2[b][kk],i,j,m[b],b));
		}
		
		
		
		
	}

	
	
	
	return 0;
}
int FindCommonF(int K1,int K2,int ia[100][101],int ja[100][101],int Nu,int c)
{
	int C1=0;
	int C2=0;
	int Count=0;
		int CoF1[101];
	int CoF2[101];
	for(int q=0;q<101;q++){
		CoF1[q]=0;
		CoF2[q]=0;
	}
	for(int i=0;i<Nu;i++)
	{
		if(ia[c][i]==K1&&ja[c][i]!=0)
		{
			CoF1[C1]=ja[c][i];
			C1++;
		}
		if(ja[c][i]==K1&&ia[c][i]!=0)
		{
			CoF1[C1]=ia[c][i];
			C1++;
		}
		if (ia[c][i]==K2&&ja[c][i]!=0)
		{
			CoF2[C2]=ja[c][i];
			C2++;
		}
		if(ja[c][i]==K2&&ia[c][i]!=0)
		{
			CoF2[C2]=ia[c][i];
			C2++;
		}
		
		
	 } 
	 
	 for(int n=0;n<C1;n++)
	 {
	 	for(int k=0;k<C2;k++)
	 	{
	 		if(CoF1[n]==CoF2[k])
	 		{
	 			Count++;
			 }
		 }
	 }
	return Count;
	}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: