Algorithm/BFS

[SWEA 5102번] 노드의 거리

킹우현 2023. 9. 21. 00:13

from collections import deque

t = int(input())

answer = []

for _ in range(t):
    v, e = map(int,input().split())
    graph = [[] for _ in range(v+1)]
    visited = [0]*(v+1)

    for i in range(e):
        start, end = map(int,input().split())
        graph[start].append(end)
        graph[end].append(start)

    s, g = map(int,input().split())

    def bfs(s,g):
        visited[s] = 0

        queue = deque([s])

        while queue:
            v = queue.popleft()

            for node in graph[v]:
                if visited[node] == 0:
                    if node == g:
                        return visited[v]+1
                    queue.append(node)
                    visited[node] = visited[v]+1
        
        return 0
    
    answer.append(bfs(s,g))

for i,value in enumerate(answer):
    print(f"#{i+1} {value}")

이번 문제는 V개의 노드와 방향성이 없는 E개의 간선들이 주어졌을 때, 출발 노드에서 도착 노드까지 거쳐야 하는 최소 간선 개수를 구하는 문제이다.

 

2차원 인접 리스트 형식으로 그래프를 표현하고 BFS를 사용하면 어렵지 않게 풀 수 있는 문제인데, 다만 조심해야 할 것은 초기에 그래프 정보를 입력할 때 "양방향"으로 저장해주어야 한다는 것이다 :)

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

[백준 1926번] 그림  (0) 2023.10.03
[프로그래머스 Lv.3] 단어 변환  (0) 2023.09.29
[SWEA 5105번] 미로의 거리  (0) 2023.09.21
[백준 1525번] 퍼즐  (0) 2023.08.12
[백준 16234번] 인구 이동  (0) 2023.08.07