본문 바로가기

알고리즘 문제풀이

텔레포트 정거장[백준 18232]

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)