728x90
BFS -> 특정 거리의 도시 찾기
https://www.acmicpc.net/problem/18352
18352번: 특정 거리의 도시 찾기
첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개
www.acmicpc.net
--popleft() 함수를 사용하는 이유
*list의 pop() 마지막 값 꺼낼 때=> O(1) (일정한 시간)
pop(0) 처음 값 꺼낼 때 => O(n) (list에 따라 다른 시간)
*deque 사용 시 popleft() = list의 pop(0) => O(1)이 걸린다.
from collections import deque
n, m, k, x = map(int, input().split())
graph = [[] for _ in range(n+1)]
for _ in range(m):
a, b = map(int, input().split())
graph[a].append(b)
# 거리 초기화
# 자기자신 거리 0
distance = [-1] * (n+1)
distance[x] = 0
# 출발지 x 삽입
q = deque([x])
while q:
now = q.popleft()
for next_node in graph[now]:
if distance[next_node] == -1:
distance[next_node] = distance[now] + 1
q.append(next_node)
result = 0
for i in range(1, n+1):
if k == distance[i]:
print(i)
result += 1
if result == 0:
print(-1)
728x90
'Algorithm > Baekjoon' 카테고리의 다른 글
(Brute Force)백준 2798 블랙잭 - python (0) | 2021.05.16 |
---|---|
(Stack)백준 2504 괄호의 값 - python (0) | 2021.03.31 |
(Floyd)백준 11404 플로이드 - python (0) | 2021.03.15 |
(BFS)백준 18405 경쟁적 전염 - python (0) | 2021.03.13 |
(DFS)백준 14502 연구소 - python (0) | 2021.03.13 |