코딩하는 해맑은 거북이

[Python] 노드사이의 거리 - 백준 (BFS) 본문

코딩테스트

[Python] 노드사이의 거리 - 백준 (BFS)

#CJE 2023. 8. 26.
해당 글은 백준 1240번 문제 '노드사이의 거리'을 다룬다.

문제

https://www.acmicpc.net/problem/1240

 

1240번: 노드사이의 거리

첫째 줄에 노드의 개수 $N$과 거리를 알고 싶은 노드 쌍의 개수 $M$이 입력되고 다음 $N-1$개의 줄에 트리 상에 연결된 두 점과 거리를 입력받는다. 그 다음 줄에는 거리를 알고 싶은 $M$개의 노드 쌍

www.acmicpc.net

 

설명

해당 문제는 그래프로 모든 노드에 대한 거리값을 저장해두고, 두 노드 사이의 거리를 구할 때 BFS 를 사용하여 해결할 수 있다.

 

코드

from collections import deque
import sys
input = sys.stdin.readline

n, m = map(int, input().split())
graph = [[] for _ in range(n+1)]

def bfs(n1, n2):
    q = deque()
    q.append((n1, 0))
    visited = [False]*(n+1)
    visited[n1] = True
    while q:
        cur_n, cur_dist = q.popleft()
        if cur_n == n2:
            return cur_dist
        for (next_n, next_dist) in graph[cur_n]:
            if not visited[next_n]:
                visited[next_n] = True
                q.append((next_n, cur_dist+next_dist))

for _ in range(n-1):
    n1, n2, dist = map(int, input().split())
    graph[n1].append((n2, dist))
    graph[n2].append((n1, dist))

for _ in range(m):
    n1, n2 = map(int, input().split())
    print(bfs(n1, n2))

     

 

 

'코딩테스트' 카테고리의 다른 글

[Python] 파티 - 백준 (최단경로)  (0) 2023.08.28
[Python] 접두사 - 백준  (0) 2023.08.27
[Python] 보물섬 - 백준 (BFS)  (0) 2023.08.25
[Python] 집합의 표현 - 백준  (0) 2023.08.24
[Python] 연구소 - 백준 (BFS)  (1) 2023.08.23
Comments