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 |