https://www.acmicpc.net/problem/2644
코딩테스트 전 이전에 공부한 bfs 개념을 되돌아보기 위해 풀어보았다.
deque를 사용하여 popleft를 사용할 수 있게하였다.
from collections import deque
answer = -1
flag = 0
n = int(input());
start, end = map(int,input().split());
m = int(input());
arr = [[0 for i in range(n+1)]for j in range(n+1)]
for i in range(0,m):
x,y = map(int,input().split());
arr[x][y] = 1;
arr[y][x] = 1;
q = deque([])
for i in range(1,n+1):
if arr[start][i] == 1:
q.append([start,i,0])
# 0부터시작이 아니라 1부터 시작
while q:
# print(q)
# print()
x , y, cnt = q.popleft();
if y == end:
answer = cnt+1
break
for i in range(1,n+1):
if arr[y][i] == 1 and i!=x:
q.append([y,i,cnt+1])
print(answer)
'알고리즘' 카테고리의 다른 글
[백준] 5014번: 스타트링크 (0) | 2022.03.22 |
---|---|
[백준] 1697번: 숨바꼭질 (0) | 2022.03.22 |
[백준] 2667번: 단지번호붙이기 (0) | 2022.02.02 |
[백준] 7576번: 토마토 (0) | 2022.02.02 |
[백준] 2178번: 미로 탐색 (0) | 2022.01.31 |