给定一个含有N<=100个用户的朋友列表<=100,对于一个指定用户,找到这个用户最可能认识的人。最可能认识的人定义为这个人和当前用户不是朋友关系(a是b的朋友,b是a的朋友),但是有最多共同朋友。如果用户和所以人都没有共同朋友返回-1.
输入:
5 0
1 2 3
4 0
4 0
4 0
1 2 3
输出:
4
c++代码
/* 5 0 1 2 3 4 0 4 0 4 0 1 2 3 */ #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <vector> using namespace std; int n,m; string a[110]; int main() { scanf("%d%d", &n,&m); getchar(); for (int i=0; i<n; i++) { getline(cin, a[i]); // cout<<a[i]<<endl; } int maxs=-1; int mark=-1; for(int k=0; k<n; k++) { if(k==m) continue; int count=0; int key=0; for(int i=0; i<a[m].length(); i+=2) { int val = a[m][i] - 48; for(int j=0; j<a[k].length(); j+=2) { int aa = a[val][j] - 48; if(val==k&&aa==m) { key=1; break; } // if(val==aa) if(a[m][i]==a[k][j]) { count++; break; } } if(key) continue; } if(key) continue; if(count>maxs) { maxs=count; mark=k; } } printf("%d ",mark); return 0; }
java代码:
import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; public class QuestionThree { public static void main(String[] args) { Scanner in=new Scanner(System.in); int n=in.nextInt(); int k=in.nextInt(); in.nextLine(); HashMap<Integer, ArrayList<Integer>> inputMap=new HashMap<>(); for(int i=0;i<n;i++) { String s=in.nextLine(); ArrayList<Integer> tempList=new ArrayList(); for(String val:s.split(" ")) tempList.add(Integer.parseInt(val)); if(i==k||!tempList.contains(k)) inputMap.put(i,tempList); } System.out.println(find(k, inputMap)); } public static int find(int k, HashMap<Integer, ArrayList<Integer>> inputMap) { ArrayList<Integer> kList=inputMap.get(k); Iterator iter=inputMap.entrySet().iterator(); int index=Integer.MAX_VALUE; int maxFriends=0; while (iter.hasNext()) { Map.Entry entry=(Map.Entry) iter.next(); ArrayList<Integer> tempList=(ArrayList<Integer>) entry.getValue(); int count=0; if((int)entry.getKey()==k) continue; for(int val:tempList) if(kList.contains(val)) count++; if(count>maxFriends) { maxFriends=count; index=(int) entry.getKey(); } if(maxFriends==count&&index>(int)entry.getKey()) index=(int)entry.getKey(); } return index; } }