1seul357

[BOJ] 노드사이의 거리 본문

알고리즘/백준

[BOJ] 노드사이의 거리

1seul 2021. 12. 11. 15:43
def dfs(now, cnt):
    for i in range(N+1):
        # 노드가 연결되어 있고, 아직 방문하지 않은 노드라면
        if tree[now][i] != 0 and visited[i] == 0:
            if l == i:                                # 만약 노드가 자기 자신이면
                continue                              # 넘어가기
            visited[i] = cnt + tree[now][i]           # 노드 사이의 거리 저장
            dfs(i, cnt+tree[now][i])


N, M = map(int, input().split())
tree = [[0]*(N+1) for _ in range(N+1)]

for i in range(N-1):
    a, b, c = map(int, input().split())       # 트리 상의 연결된 두 점과 거리 입력받기
    tree[a][b] = tree[b][a] = c               # 이차원 리스트 사용

for i in range(M):
    visited = [0] * (N + 1)                   # 방문체크 초기화
    l, k = map(int, input().split())          # 거리를 알고 싶은 노드의 쌍 입력받기
    dfs(l, 0)                                 # dfs 탐색
    print(visited[k])                         # 거리 출력
문제 풀이

1) 노드는 1부터 시작하니까 트리의 크기는 (N+1)
2) visited 리스트 사용해서 거리의 합 저장
3) visited 리스트는 거리를 알고 싶은 노드의 쌍 입력받을 때 초기화해야 함
4) 아직 방문하지 않은 노드만 탐색

'알고리즘 > 백준' 카테고리의 다른 글

[BOJ] 스타트링크  (0) 2022.01.08
[BOJ] 집합의 표현  (0) 2022.01.05
[BOJ] 문자열 집합  (0) 2021.12.11
[BOJ] 트리  (0) 2021.12.10
[BOJ] 프린터 큐  (0) 2021.12.09