반응형
bfs를 deque로 이용해서 문제를 풀음.
처음에 dfs 문제인줄 알고 dfs로 풀었지만 촌수 관계가 없을 때 -1을 출력하도록 하는 예외처리가 힘들어서
bfs를 이용해서 지난간 것은 전 노드에 +1씩 추가하여 목적지 b에는 몇촌 관계인지 표현할 수있도록 하였음. 방문여부는 그 해당 노드의 값이 0인지 아닌지 판별해서 구분!!
import sys
input=sys.stdin.readline
from collections import deque
n = int(input())
a,b = map(int,input().split())
m = int(input())
graph={}
for _ in range(m):
x,y=map(int,input().split())
if x not in graph:
graph[x]=[y]
elif y not in graph:
graph[x].append(y)
if y not in graph:
graph[y]=[x]
elif x not in graph:
graph[y].append(x)
queue=deque([a])
count = [0]*(n+1)
while queue:
item = queue.popleft()
for i in graph[item]:
if count[i]==0:
count[i]+=(count[item]+1)
queue.append(i)
if count[b]==0:
print(-1)
else:
print(count[b])
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
1697번 파이썬 (0) | 2022.03.20 |
---|---|
7569번 파이썬 (0) | 2022.03.20 |
10844번 파이썬 (0) | 2022.03.17 |
2667번 파이썬 (0) | 2022.03.17 |
2606번 파이썬 (0) | 2022.03.16 |