Algorithm/BFS&DFS

[Python] 백준 1240번 노드사이의 거리

코딩쪼앙 2023. 11. 1. 23:50

문제

 

1240번: 노드사이의 거리

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

www.acmicpc.net

입력

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

출력

  • M개의 줄에 차례대로 입력받은 두 노드 사이의 거리를 출력한다.

입력 예제

4 2
2 1 2
4 3 2
1 4 3
1 2
3 2

출력 예제

2
7

문제 풀이

  • 인접리스트로 그래프를 만든 후, 가중치 값을 더해가며 경로를 탐색한다.

코드

from collections import deque

def bfs(start, end):
    visited = [0] * (n + 1)
    queue = deque()
    queue.append((start, 0))
    visited[start] = 1
    while queue:
        now, cost = queue.popleft()
        if now == end:
            return cost
        for nn, c in graph[now]:
            if visited[nn] == 0:
                visited[nn] = 1
                queue.append((nn, cost + c))

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

# 그래프 입력받기
for _ in range(n - 1):
    u, v, w = map(int,input().split())
    graph[u].append((v,w))
    graph[v].append((u,w))
# print(*graph)
# m개의 노드 쌍 입력
for _ in range(m):
    start, end = map(int,input().split())
    print(bfs(start,end))

'Algorithm > BFS&DFS' 카테고리의 다른 글

[Python] 프로그래머스 미로 탈출  (1) 2024.07.24
[Java] 백준 13165번 침투  (2) 2023.11.02
[Java] 백준 4179번 불!  (1) 2023.11.01
[Python] SWEA 2817번 부분 수열의 합  (0) 2023.05.15
[Python] SWEA 2814번 최장경로  (0) 2023.05.15