코테 대비 python/백준
21278 bfs ==> 다시 풀어보기
ylab
2023. 1. 27. 21:32
https://www.acmicpc.net/problem/21278
from itertools import combinations
from collections import deque
import sys
def input():
return sys.stdin.readline().rstrip()
N, M = map(int, input().split())
graph = {i: [] for i in range(1, N+1)}
for _ in range(M):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
def bfs(start1, start2, graph, N):
result = [99999999 for _ in range(N+1)]
result[0] = 0 # 인덱스 0은 더미
result[start1] = 0
result[start2] = 0
q = deque()
q.append((start1, 0))
q.append((start2, 0))
visit = set()
visit.add(start1)
visit.add(start2)
while q:
if len(visit) == N:
break
cur, dist = q.popleft()
for nxt in graph[cur]:
if nxt in visit: continue
visit.add(nxt)
q.append((nxt, dist + 1))
result[nxt] = dist + 1
return sum(result)
def solution(graph, N):
candidate = [i for i in range(1, N+1)]
answer = 99999999
fin_store1 = N+1
fin_store2 = N+1
for comb in combinations(candidate, 2):
store1, store2 = comb
result = bfs(store1, store2, graph, N)
if answer > result:
fin_store1 = store1
fin_store2 = store2
answer = result
elif answer == result:
if fin_store1 > store1:
fin_store1 = store1
fin_store2 = store2
answer = result
elif fin_store1 == store1:
if fin_store2 > store2:
fin_store1 = store1
fin_store2 = store2
answer = result
return ' '.join(map(str, [fin_store1, fin_store2, answer * 2]))
print(solution(graph, N))