큐 자료구조 이용
from collections import deque
def bfs(graph,start,visit):
# 큐 구현을 위해 deque 라이브러리 사용 & 시작 노드를 큐에 넣어 줌
q = deque([start])
# 현재 노드 방문 처리
visit[start] = True
# 큐가 빌 때까지 반복
while q:
v = q.popleft() # 가장 먼저 들어온 원소 뽑기
print(v, end = ' ')
# 아직 방문하지 않은 인접한 원소들을 큐에 삽입
for i in graph[v]:
if not visit[i]:
q.append(i)
visit[i] = True
graph = [
[],
[2,3,8],
[1,7],
[1,4,5],
[3,5],
[3,4],
[7],
[2,6,8],
[1,7]
]
# 각 노드가 방문된 정보를 표현 (index 0은 사용 X)
visit = [False] * 9
bfs(graph, 1, visit)
from collections import deque
def bfs(x,y):
q = deque()
q.append((x,y))
while q:
x,y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
# 공간을 벗어난 경우 무시
if nx < 0 or nx >= n or ny < 0 or ny >= m:
continue
# 벽인 경우 무시
if graph[nx][ny] == 0:
continue
# 해당 노드를 처음 방문하는 경우에만 최단 거리 기록
if graph[nx][ny] == 1:
graph[nx][ny] = graph[x][y] + 1
q.append((nx,ny))
# 가장 오른쪽 아래까지의 거리 반환
return graph[n-1][m-1]
n,m = map(int,input().split())
graph = []
for _ in range(m):
graph.append(list(map(int,input())))
# 상/하/좌/우 방향 벡터 정의
dx = [-1,1,0,0]
dy = [0,0,-1,1]
print(bfs(0,0))