2018.8.5拼多多笔试题3———最亲密的非朋友

输入描述:
第一行:第一个表示用户数目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;
}

猜你喜欢

转载自blog.csdn.net/imprincess/article/details/81436662