日期:2025年11月27日
ZeroJudge 題目連結:k205. 蝸牛的踩地雷攻略 1 (插旗)
解題想法
我用二維陣列儲存地圖,並在周圍加上 _ 當作哨兵避免出界。依序掃過每個格子,如果這格不是數字,就跳過找下一格;如果是數字,計算周圍 8 格有幾個 # 或 P,並記錄這些位置,如果 # 及 P 的數量等於這格標記的數字,剛才記錄的位置都改成 P。
Python 程式碼
使用時間約為 20 ms,記憶體約為 3.4 MB,通過測試。
n, m = map(int, input().split())
grid = [list(input() + '_') for _ in range(n)]
grid.append(['_']*(m+1))
for r in range(n):
for c in range(m):
if not grid[r][c].isnumeric(): continue
cnt = 0
bomb = []
for dr, dc in ((0, 1), (1, 1), (1, 0), (1, -1), (0, -1), (-1, -1), (-1, 0), (-1, 1)):
nr, nc = r+dr, c+dc
if grid[nr][nc] == '#' or grid[nr][nc] == 'P':
cnt += 1
bomb.append((nr, nc))
if cnt == int(grid[r][c]):
for nr, nc in bomb:
grid[nr][nc] = 'P'
for row in grid[:n]:
print("".join(row[:m]))