def BOJ1389() :
n, m = map(int, input().split())
temp = [[1e9] * n for _ in range(n)]
for _ in range(m) :
start, end = map(int, input().split())
temp[start-1][end-1] = 1
temp[end-1][start-1] = 1
for mid in range(n) :
for start in range(n) :
for end in range(n) :
if mid != end and temp[start][mid] and temp[mid][end]:
temp[start][end] = min(temp[start][end], temp[start][mid] + temp[mid][end])
result = 1e9
p = 0
for i in range(n) :
total = sum(temp[i])
if result > total :
result = total
p = i
print(p+1)
BOJ1389()
접근방법 :
1. 네트워크 관련 알고리즘 이다. => 플로이드 워셜, 벨만포드, 다익스트라
모든 경로에 대한 최단 거리의 접근이 필요하다 => 플로이드 워셜
2. 각 지점에서 시작했을때의 최단거리들로 업데이트 되었으므로 거리의 합을 계산해서 비교해주자
장애물 이였던 것 :
1. 플로이드 워셜 알고리즘을 쉽게 떠올리지 못했고 적용하는 과정에서도 중간 지점의 위치를 잘못 설정하여서 애먹었다.
https://www.acmicpc.net/problem/1389
1389번: 케빈 베이컨의 6단계 법칙
첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻
www.acmicpc.net
'알고리즘' 카테고리의 다른 글
숨바꼭질 4 (0) | 2022.01.06 |
---|---|
숨바꼭질 [백준 1697] - python (0) | 2022.01.05 |
가장 큰 증가 부분 수열[백준 11055] - python (0) | 2022.01.02 |
LCS [백준 9251] - python (0) | 2022.01.01 |
파도반 수열[백준 9461] - python (0) | 2021.12.31 |