IT/ps

백준 14940번 쉬운 최단거리

u149_cinderella 2025. 2. 16. 00:41

그냥 bfs로 최단거리를 구하면 된다.

 

from collections import deque
import sys

n,m=map(int,sys.stdin.readline().rstrip().split())
graph=[]
for i in range(n):
    graph.append(list(map(int,sys.stdin.readline().rstrip().split())))

q=deque()
visited=[[-1]*m for _ in range(n)]
for i in range(n):
    for j in range(m):
        if graph[i][j]==2:
            q.append([i,j])
            visited[i][j]=0
dr=[-1,0,1,0]
dc=[0,1,0,-1]
while q:
    cur_row,cur_col=q.popleft()
    for i in range(4):
        row=cur_row+dr[i]
        col=cur_col+dc[i]
        if row>=n or row<0 or col>=m or col<0:
            continue
        if graph[row][col]==0:
            visited[row][col]=0
            continue
        if visited[row][col]!=-1:
            continue
        visited[row][col]=visited[cur_row][cur_col]+1
        q.append([row,col])
for i in visited:
    print(*i)

이렇게 작성했는데

틀렸다.

 

문제를 덜읽었었다.

마지막에 도달할수없으면서 1인 부분은 -1로 출력하라는걸 못봤다.

조금 더 수정해주자

도달하지 못한 0이 -1로 나올테니까 수정한다.

 

from collections import deque
import sys

n,m=map(int,sys.stdin.readline().rstrip().split())
graph=[]
for i in range(n):
    graph.append(list(map(int,sys.stdin.readline().rstrip().split())))

q=deque()
visited=[[-1]*m for _ in range(n)]
for i in range(n):
    for j in range(m):
        if graph[i][j]==2:
            q.append([i,j])
            visited[i][j]=0
        elif graph[i][j]==0:
            visited[i][j]=0
dr=[-1,0,1,0]
dc=[0,1,0,-1]
while q:
    cur_row,cur_col=q.popleft()
    for i in range(4):
        row=cur_row+dr[i]
        col=cur_col+dc[i]
        if row>=n or row<0 or col>=m or col<0:
            continue
        if visited[row][col]!=-1:
            continue
        visited[row][col]=visited[cur_row][cur_col]+1
        q.append([row,col])
for i in visited:
    print(*i)

이렇게 수정해줬다.