結果
問題 |
No.157 2つの空洞
|
ユーザー |
|
提出日時 | 2025-04-25 08:32:32 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 49 ms / 2,000 ms |
コード長 | 1,451 bytes |
コンパイル時間 | 360 ms |
コンパイル使用メモリ | 82,068 KB |
実行使用メモリ | 64,752 KB |
最終ジャッジ日時 | 2025-04-25 08:32:35 |
合計ジャッジ時間 | 2,468 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 16 |
ソースコード
from collections import deque W, H = map(int,input().split()) C = [input() for _ in range(H)] INF=float('inf') visited = [[-1] * W for _ in range(H)] def group(val): for i in range(H): for j in range(W): if C[i][j] == "." and visited[i][j] == -1: si = i sj = j directions=[ (1,0), (-1,0), (0,1), (0,-1), ] visited[si][sj] = val que = deque() que.append((si, sj)) while que: i, j = que.popleft() for di, dj in directions: ni = i + di nj = j + dj if not (0 <= ni < H and 0 <= nj < W): continue if C[ni][nj] == "#": continue if visited[ni][nj] != -1: continue visited[ni][nj] = val que.append((ni, nj)) # 1つ目の空洞 group(0) # 2つ目の空洞 group(INF) # 一方からもう一方へ向かう que = deque() for i in range(H): for j in range(W): if visited[i][j] == 0: que.append((i, j)) directions=[ (1,0), (-1,0), (0,1), (0,-1), ] ans = INF while que: i, j = que.popleft() for di, dj in directions: ni = i + di nj = j + dj if not (0 < ni < H-1 and 0 < nj < W-1): continue if visited[ni][nj] == INF: ans = min(ans, visited[i][j]) continue if C[ni][nj] != "#": continue if visited[ni][nj] != -1 and visited[ni][nj] <= visited[i][j] + 1: continue visited[ni][nj] = visited[i][j] + 1 que.append((ni, nj)) print(ans)