해리의 데브로그

(SW 문제해결 기본 - Queue) SWEA 5102 - 노드의 거리

|

문제

  • SWEA 5105 - [파이썬 S/W 문제해결 기본 6일차] Queue - 노드의 거리
  • 문제링크
  • 문제의 저작권은 SW Expert Academy에 있습니다.

나의 코드

  • BFS 와 Queue를 활용한 문제이며, 미로 => 그래프로 문제의 유형만 바뀌었을 뿐, 전반적인 맥락을 동일하다.
  • 이 문제는 방향성이 없으므로 MyMap(좌표) 안 [start][end] 와 [end][start] 두 곳 모두 경로를 찍었으며, 노드중에 간선이 연결되지 않는 경우를 고려하여 BFS 함수 내에 또다른 return 을 입력하였다.
def BFS(start_node):
    global result
    Q.append(start_node)
    visited[start_node] = 1

    while Q:
        start_node = Q.pop(0)
        for next_node in range(1, v+1):
            if MyMap[start_node][next_node] and not visited[next_node]:
                Q.append(next_node)
                visited[next_node] = 1
                distance[next_node] = distance[start_node] +1
                if next_node == end_node:
                    result = distance[next_node]
                    return
    return

TC = int(input())
for tc in range(1, TC+1):
    v,e = map(int, input().split())
    MyMap = [[0] * (v+1) for _ in range(v+1)]
    visited = [0] * (v+1)
    distance = [0] * (v+1)

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

    start_node, end_node = map(int, input().split())

    Q = []
    result = 0
    BFS(start_node)
    print(f'#{tc} {result}')

Comments