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

来源:互联网 发布:淘宝客在哪推广 编辑:程序博客网 时间:2024/05/29 08:02

题:

总时间限制: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;}

推荐文章:那些年,做的几个应用


1 0
原创粉丝点击