[Baekjoon] 1726. ロボット[G 3]
15572 ワード
📚 質問する
https://www.acmicpc.net/problem/1726
📖 に答える
最小値を求めるのでBFSナビゲーションを使用します.
4方向でデルタ探索を行い,さらに方向回転を加える.
方向を含めるために,アクセスを3次元と宣言し,座標の方向ごとに個別に処理する.
最小値の更新を続行するため、表示できない最低価格に初期化します.
方向は90度方向、前進は1-3格となりますので、5回確認します.方向は右下左上、それぞれ1,2,3,4と入力します.したがって、0からは開始されないので、paddingへのアクセスを宣言するときに挿入する必要があります.
座標の埋め込みが難しいので、座標を置かずに、始点と終点の座標値を1ずつ減算します.
方向は右、下人なら左、上に回ればいいです.アクセスをより低い値で変更できる場合は、アクセスを変更してキューに入れます.
前進は1-3格で入力の並びが1かどうかを確認できます.1があると歩けないので、breakで次のチェックを確認しないで終わります.行けるなら移動してアクセスを確認し、最小値なら交換してキューに入れます.
上記の手順を繰り返し、必要な到達点に到達すると出力して終了します.
📒 コード#コード#
from collections import deque
m, n = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(m)]
s_x, s_y, s_d = list(map(int, input().split())) # 시작점 좌표와 방향
e_x, e_y, e_d = list(map(int, input().split())) # 도착점 좌표와 방향
s_x -= 1 # 주어진 입력 좌표가 1,1부터 시작하는데 패딩을 넣기 귀찮으니 입력에서 각각 1을 빼준다.
s_y -= 1
e_x -= 1
e_y -= 1
INF = 100000
dx = [0, 0, 0, 1, -1] # padding + 우 좌 하 상
dy = [0, 1, -1, 0, 0]
visited = [[[0, INF, INF, INF, INF] for _ in range(n)] for _ in range(m)] # 네 방향 값으로 초기화 해준다.
visited[s_x][s_y][s_d] = 0 # 시작점은 명령이 0이니 넣어준다.
queue = deque()
queue.append((s_x, s_y, s_d)) # 시작점을 큐에 넣고 시작
while queue:
x, y, d = queue.popleft()
if [x, y, d] == [e_x, e_y, e_d]: # 도착점의 원하는 방향에 도달했을 때
print(visited[e_x][e_y][e_d]) # 명령받은 값을 출력하고 종료
break
for i in range(1, 5): # 방향 전환
if d in [1, 2] and i in [1, 2]: # d가 우, 좌 방향인데 회전할 방향도 우, 좌이면 안 된다.
continue
if d in [3, 4] and i in [3, 4]: # d가 하, 상 방향인데 회전할 방향도 하, 상이면 안 된다.
continue
if visited[x][y][i] > visited[x][y][d] + 1: # 회전했을 때 저장된 값보다 작으면 바꿔주고 큐에 담는다.
visited[x][y][i] = visited[x][y][d] + 1
queue.append((x, y, i))
for i in range(1, 4): # 전진, 1~3으로 움직일 수 있다.
nx = x + dx[d] * i
ny = y + dy[d] * i
if not (0 <= nx < m and 0 <= ny < n) or arr[nx][ny] == 1: # 중간에 갈 수 없으면 종료
break
if visited[nx][ny][d] > visited[x][y][d] + 1: # 전진했을 때 저장 값보다 작으면 바꿔주고 큐에 담는다.
visited[nx][ny][d] = visited[x][y][d] + 1
queue.append((nx, ny, d))
🔍 結果
Reference
この問題について([Baekjoon] 1726. ロボット[G 3]), 我々は、より多くの情報をここで見つけました https://velog.io/@yunhlim/Baekjoon-1726.-로봇-G3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol