結果
| 問題 |
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)