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; }
相关文章推荐
- neuq oj 1047: 谭浩强C语言(第三版)习题6.3 C++
- OpenJudge百炼习题解答(C++ )--题4112:情报破译-Cryptanalysis
- OpenJudge百炼习题解答(C++)--题2000:金币
- C与C++比较新增功能大全(完善中)
- OpenJudge百炼习题解答(C++)--题1936:全在其中
- C/C++程序编译步骤 如何生成可执行文件
- source insight用于C语言编程的工具脚本
- C/C++中各种类型int、long、double、char表示范围(最大最小值)(转)
- c++笔试题总结2
- neuq oj 1044: 谭浩强C语言(第三版)习题5.8 C++
- C++操作二进制文件
- [C++]类模板
- C++学习之 构造函数中调用构造函数
- c++异常安全和copy and swap策略
- C++ 回调机制
- 重温C++ 之 重载操作符
- C++中的类所占内存空间总结
- 关于C++虚函数表实例
- 数字相加等于2048c++源代码
- C++学习笔记之 构造函数的初始化列表