문제
1389번: 케빈 베이컨의 6단계 법칙
첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻
www.acmicpc.net
코드
BFS로 풀었다.
import java.util.*;
import java.io.*;
class Main{
static ArrayList<Integer>[] adjacent;
static int users;
public static int addCnt(int[] visited) {
int sum = 0;
for(int e : visited) {
//System.out.print(e+" ");
sum+=e;
}
//System.out.println(sum);
return sum;
}
public static int bfs(int start) {
Queue<Integer> queue = new LinkedList<Integer>();
int[] visited = new int[users+1];
boolean[] marked = new boolean[users+1];
queue.add(start);
marked[start] = true;
while(!queue.isEmpty()) {
int first = queue.poll();
for(int e : adjacent[first]) {
if(visited[e]==0 && !marked[e]) {
queue.offer(e);
marked[e] = true;
visited[e]=visited[first]+1;
}
}
}
return addCnt(visited);
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] info = br.readLine().split("\\s");
users = Integer.parseInt(info[0]);
int relations = Integer.parseInt(info[1]);
adjacent = new ArrayList[users+1];
for(int i=1; i<=users; i++) {
adjacent[i] = new ArrayList<Integer>();
}
for(int i=0; i<relations ; i++) {
String[] arr = br.readLine().split("\\s");
int a = Integer.parseInt(arr[0]);
int b = Integer.parseInt(arr[1]);
adjacent[a].add(b);
adjacent[b].add(a);
}
int answer = 1000000;
int answerUser = 0;
for(int i=1 ; i<=users; i++) {
int a = bfs(i);
if(a<answer) {
answer = a;
answerUser = i;
}
}
System.out.println(answerUser);
}
}
'Preparing Coding Test > Baekjoon' 카테고리의 다른 글
[Java/백준/우선순위 큐] 11286번: 절댓값 힙 (0) | 2020.11.25 |
---|---|
[Java/백준/우선순위 큐] 11279번: 최대 힙, 1927번: 최소 힙 (0) | 2020.11.25 |
[Java/백준/DP] 1010번: 다리 놓기 (0) | 2020.10.16 |
[Java/백준/DP] 1463번: 1로 만들기 (0) | 2020.10.05 |
[Java/백준/DP] 2579번: 계단 오르기 (0) | 2020.10.05 |