输入描述:
第一行:第一个表示用户数目N(N<100); 第二个数为需要判断的用户序号
第2至N+1行:表示序号为0到序号为N-1的每个用户的朋友序号列表,每个列表长度小于100
输出描述:
给定用户最可能认识的人的用户序号(定义为这个人和当前用户不是好友关系名单有最多的共同朋友。如果这种情况有多个,则返回序号最小的那个;如果没有,返回-1)
输入示例:
5 0
1 2 3
0 4
0 4
0 4
1 2 3
输出示例:
4
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
int N,k;
cin>>N>>k;
//定义动态二维数组并初始化
vector<vector<int> >friends(N, vector<int>(N));
string line;
getline(cin,line);
for(int i = 0; i<N ;i++)
{
getline(cin,line);
line+=" ";
int sum = 0;
for(int j=0;j<line.size();j++)
{
if(line[j]!=' ')
sum = sum*10 + line[j] - '0';
else
{
friends[i][sum] = 1;
sum = 0;
}
}
}
int sum = 0;
int pos = -1;
for(int i=0;i<N;i++)
{
if(friends[k][i]!=1 && i!=k)//对于k的非好友i,判断它们之间共同好友的个数
{
int com = 0;
for(int m=0;m<N;m++){
if(friends[k][m]==1 && friends[i][m]==1)
com++;
}
if(com>sum)
{
sum = com;
pos = i;
}
}
}
cout<<pos<<endl;
return 0;
}