Algorithm/SW Expert Academy

[Python] 5102. 노드의 거리

느낌표 공장장 2021. 9. 23. 23:08
def bfs(s, g):
    q = [s]          # 큐 생성 및 시작점 넣어주기
    while q:
        now = q.pop(0)  # 큐의 맨 앞에서 저장된 노드 가져오기
        if now == g:    # 현재 노드가 목표 노드라면 중지
            return

        for i in adj[now]:      # 현재 노드에서 연결된 노드 다가져와
            if not distance[i]: # 연결된 노드 i가 아직 방문 안한곳이면
                q.append(i)     # 방문해봐야지. q에 넣어준다.

                # 출발노드 ~ 노드 i 까지의 거리 =  출발노드 ~ 현재노드까지의 거리 +1
                # 왜냐면 현재 노드(변수 now)에서 1칸 움직인거니까
                distance[i] = distance[now] + 1


tc = int(input())
for idx in range(1, tc+1):
    v, e = map(int, input().split())    # 노드 개수 v, 연결 정보 개수 e

    # 인접리스트 생성
    adj = [[] for _ in range(v+1)]
    for _ in range(e):
        s, e = map(int, input().split())    # 간선의 양쪽 노드 번호 s, e
        adj[s].append(e)
        adj[e].append(s)

    s, g = map(int, input().split())    # 출발 노드 s, 도착 노드 g
    distance = [0] * (v+1)   # 출발점부터의 거리 저장할 리스트 (인덱스 편하게 사용 하기 위해 v+1)

    bfs(s, g)

    print('#{} {}'.format(idx, distance[g]))

'Algorithm > SW Expert Academy' 카테고리의 다른 글

[Python] 1231. 중위 순회  (0) 2021.09.23
[Python] 5105. 미로의 거리  (0) 2021.09.23
[Python] 5099. 피자굽기  (0) 2021.09.23
[Python] 1226. 미로1  (0) 2021.09.23
[Python] 1225. 암호생성기  (0) 2021.09.23