https://www.acmicpc.net/problem/18232
from collections import deque
def bfs(N, S, E, teleport):
visited = [-1] * (N + 1) # 방문 여부 및 시간 기록
queue = deque([S])
visited[S] = 0 # 시작점은 0초
while queue:
current = queue.popleft()
# 목표 지점에 도달한 경우
if current == E:
return visited[current]
# X+1로 이동
if current + 1 <= N and visited[current + 1] == -1:
visited[current + 1] = visited[current] + 1
queue.append(current + 1)
# X-1로 이동
if current - 1 >= 1 and visited[current - 1] == -1:
visited[current - 1] = visited[current] + 1
queue.append(current - 1)
for neighbor in teleport[current]:
if visited[neighbor] == -1:
visited[neighbor] = visited[current] + 1
queue.append(neighbor)
return -1
N, M = map(int, input().split())
S, E = map(int, input().split())
teleport = [[] for _ in range(N + 1)]
for _ in range(M):
x, y = map(int, input().split())
teleport[x].append(y)
teleport[y].append(x)
result = bfs(N, S, E, teleport)
print(result)
'알고리즘 문제풀이' 카테고리의 다른 글
전쟁-전투[백준 1303] (0) | 2025.01.31 |
---|---|
양치기 꿍[백준 3187] (0) | 2025.01.30 |
돌다리[백준 12761] (0) | 2025.01.28 |
너구리 구구[백준 18126] (1) | 2025.01.28 |
거리가 k이하인 트리 노드에서 사과 수확하기[백준 25516] (0) | 2025.01.28 |