▼考え方
ポイントになる考え方1.~4.を以下に示します。
1.与えられた座標のマス(y,x)の1つ上の行(縦:y-1)、同じ行(縦:y)、1つ下の行(縦:y+1)、の順に処理します。
2.1つの行につき、与えられた座標のマス(y,x)の左隣(横:x-1)、同じ(横:x)、1つ右隣(横:x+1)、の順に処理します。
3.縦方向の添え字jや横方向の添え字iがマップの範囲を超える場合は、処理せず次のループに入ります。
4.与えられた座標のマス(y,x)の1つ上の行および1つ下の行において、(y,x)の上下左右に含まれないマスは処理しません。
▼コード
# 横方向 x,W,i
# 縦方向 y,H,j
########## 処理0(準備) インプット,リスト定義など ###########
H,W = map(int,input().split())
S = [[0 for i in range(W)] for j in range(H)]
for j in range(H):
S[j] = list(input())
y,x = map(int,input().split())
########## 処理1 マップの書き換え、マップの出力 ##########
# 考え方1.
for j in range(y-1,y+2,1):
# 考え方2.
for i in range(x-1,x+2,1):
# 考え方3.
if (j < 0 or j > H-1) or (i < 0 or i > W-1):
continue
# 考え方4.
if (j == y-1 or j == y+1) and (i != x):
continue
else:
if S[j][i] == ".":
S[j][i] = "#"
else:
S[j][i] = "."
for j in range(H):
print(*S[j],sep='')