結果
問題 |
No.3199 Key-Door Grid
|
ユーザー |
![]() |
提出日時 | 2025-07-11 21:48:12 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 945 ms / 3,000 ms |
コード長 | 1,088 bytes |
コンパイル時間 | 331 ms |
コンパイル使用メモリ | 81,804 KB |
実行使用メモリ | 150,436 KB |
最終ジャッジ日時 | 2025-07-11 21:48:33 |
合計ジャッジ時間 | 13,503 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 37 |
ソースコード
from collections import deque h,w,m=map(int,input().split()) s=[list(input()) for _ in range(h)] for i in range(h): for j in range(w): if s[i][j]=='S': st=[i,j] elif s[i][j]=="G": go=[i,j] inf=10**18 dp=[[[inf]*11 for _ in range(w)] for _ in range(h)] dp[st[0]][st[1]][0]=0 s[st[0]][st[1]]="." s[go[0]][go[1]]="." dq=deque([(st[0],st[1],0)]) dir=[0,1,0,-1] num=[str(i) for i in range(10)] while dq: x,y,k=dq.popleft() now=dp[x][y][k] for i in range(4): p,q=x+dir[i],y+dir[i^1] if 0<=p<h and 0<=q<w: if s[p][q]=="#": continue if s[p][q]==".": if dp[p][q][k]>now+1: dp[p][q][k]=now+1 dq.append((p,q,k)) elif s[p][q] in num: v=int(s[p][q]) if dp[p][q][v]>now+1: dp[p][q][v]=now+1 dq.append((p,q,v)) else: if ord(s[p][q])-ord('a')+1==k: if dp[p][q][k]>now+1: dp[p][q][k]=now+1 dq.append((p,q,k)) ans=min(dp[go[0]][go[1]]) if ans==inf: print(-1) else: print(ans)