반응형
[광고 누르면 오늘의 행운 상승!!]
https://www.acmicpc.net/problem/1389
1389번: 케빈 베이컨의 6단계 법칙
첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻이다. A와 B가 친구이면, B와 A도 친구이며, A와 B가 같은 경우는 없다. 친구 관계는 중복되어 들어올 수도 있으며, 친구가 한 명도 없는 사람은 없다. 또, 모든 사람은 친구 관계로 연결되어져 있다.
www.acmicpc.net
그래프 문제
플로이드 알고리즘을 사용하여 풀었다.
하지만 플로이드 알고리즘은 O(n^3) 이기 때문에 BFS로 푸는 방법을 생각해 봐야함
package Study0227;
import java.io.*;
import java.util.*;
public class 케빈베이컨의6단계법칙 {
static int map[][] = new int[101][101];
static int N,M,ans;
static int Min = Integer.MAX_VALUE;
public static void main(String[] args) throws Exception{
System.setIn(new FileInputStream("test.txt"));
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
M = sc.nextInt();
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
if(i!=j)map[i][j] = 999999;
for (int j = 0; j < M; j++) {
int row = sc.nextInt()-1;
int col = sc.nextInt()-1;
map[row][col] = 1;
map[col][row] = 1;
}
for (int k = 0; k < N; k++) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (map[i][j] > map[i][k] + map[k][j])
map[i][j] = map[i][k] + map[k][j];
}
}
}//플로이드 와샬 알고리즘 All pair Shortest Path 알고리즘.
for (int i = 0; i < N; i++) {
int temp = 0;
for (int j = 0; j < N; j++) {
temp += map[i][j];
}
if(Min > temp) {
Min = temp;
ans = i;
}
}
System.out.println(ans+1);
}
}
//1 3
//1 4
//2 3
//3 4
//4 5
.
반응형
'2. 알고리즘사이트 > 1. 백준' 카테고리의 다른 글
벽 부수고 이동하기[백준 2206][골드4][Java] (0) | 2020.03.01 |
---|---|
배열돌리기2[백준 16927][실버3][Java] (0) | 2020.03.01 |
로봇청소기 [백준 14503][골드5][Java] (0) | 2020.03.01 |
N과M(12) -오름차순 중복조합(중복 요소 제거)- (0) | 2020.03.01 |
N과M(11) -오름차순 중복순열(중복 요소 제거)- (0) | 2020.03.01 |