題目描述:
給出一個(gè)是否為朋友的矩陣輸入用逗號(hào)分隔, isFriend[i][j]==1表示為朋友,否則不是朋友;
找出一對(duì)i, j使得i, j不是直接朋友,但是i,j有共同的朋友,求這種共同的朋友數(shù)量最多的情況即可。
思路:
簡(jiǎn)單枚舉計(jì)算即可。(這里用了split所以用了java)
代碼如下:
package fall_2018;
import java.util.*;
public class Test03 {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int N, targetId;
N=sc.nextInt();
targetId=sc.nextInt();
//吃掉回車
sc.nextLine();
//構(gòu)建朋友矩陣
boolean[][] isFriendMatrix=new boolean[N][N];
for(int i=0; i<N; i++){
String friendListStr = sc.nextLine();
String[] friendIdStrArr=friendListStr.split("\\s+");
for(String friendIdStr:friendIdStrArr){
int friendId=Integer.parseInt(friendIdStr);
isFriendMatrix[i][friendId]=true;
isFriendMatrix[friendId][i]=true;
}
}
//找出與targetId共同朋友最多的人
int resultId=-1, resultMaxCommonFriendNum=0;
for(int uId=0; uId<N; uId++){
if(uId==targetId)
continue;
//若為朋友不用
if(isFriendMatrix[targetId][uId])
continue;
int commonFriendNum=0;
for(int vId=0; vId<N; vId++){
if(isFriendMatrix[targetId][vId] && isFriendMatrix[uId][vId]){
commonFriendNum++;
}
}
if(commonFriendNum>resultMaxCommonFriendNum){
resultMaxCommonFriendNum=commonFriendNum;
resultId=uId;
}
}
//輸出結(jié)果
System.out.println(resultId);
}
}