結果
問題 | No.367 ナイトの転身 |
ユーザー |
![]() |
提出日時 | 2016-04-30 00:15:33 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,290 ms / 2,000 ms |
コード長 | 1,118 bytes |
コンパイル時間 | 396 ms |
コンパイル使用メモリ | 81,848 KB |
実行使用メモリ | 120,964 KB |
最終ジャッジ日時 | 2024-10-04 23:24:49 |
合計ジャッジ時間 | 7,845 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 27 |
ソースコード
import queueH,W = map(int,input().split())s = [input() for i in range(H)]sx,sy,gx,gy = 0,0,0,0for i in range(H):for j in range(W):if s[i][j] == 'S':sy = isx = jelif s[i][j] == 'G':gy = igx = jused = [[[False for k in range(2)]for j in range(W)] for i in range(H)]find = Falseadx = [2,-2,2,-2,1,-1,1,-1]ady = [1,1,-1,-1,2,2,-2,-2]bdx = [1,1,-1,-1]bdy = [1,-1,1,-1]q = queue.Queue()q.put(0)q.put(sy)q.put(sx)q.put(True)used[sy][sx][0] = Truewhile q.qsize() > 0 and (not find):c = q.get()y = q.get()x = q.get()isKnight = q.get()cdy = bdycdx = bdxif isKnight:cdy = adycdx = adxfor i in range(len(cdx)):ny = cdy[i] + ynx = cdx[i] + xmode = isKnightif ny < 0 or nx < 0 or ny >= H or nx >= W:continueif isKnight:if used[ny][nx][0]:continueelse:if used[ny][nx][1]:continueif ny == gy and nx == gx:print(c + 1)find = Truebreakif s[ny][nx] == 'R':mode = (not mode)if isKnight:used[ny][nx][0] = Trueelse:used[ny][nx][1] = Trueq.put(c + 1)q.put(ny)q.put(nx)q.put(mode)if not find:print (-1)