Problem p03361 (python)

Fixed submission:
# coding : utf-8

H, W = map(int, input().split())
S = []
for i in range(H):
    S.append(list(input()))

ans = 'Yes'
endFlg = False
# '#'の点をみつけたときに、その上下左右に'#'がない場合、孤立した点を黒く塗ることはできないので、答えはNoとなる。
# 全部の'#'の点について、その上下左右のいずれかに'#'が見つかれば、答えはYesとなる。

for i in range(H):
    for j in range(W):
        if S[i][j] == '#':
            if i != 0 and S[i-1][j] == '#':
                continue
            elif i != H-1 and S[i+1][j] == '#':
                continue
            elif j != 0 and S[i][j-1] == '#':
                continue
            elif j != W-1 and S[i][j+1] == '#':
                continue
            else :
                ans = 'No'
                endFlg = True
                break
    if endFlg:
        break

print(ans)

Buggy submission (verdict: Runtime Error):
# coding: utf-8

H, W = map(int, input().split())
S = []
for i in range(H):
    S.append(list(input()))
ans = 'Yes'
endFlg = False

# '#'の点をみつけたときに、その上下左右に'#'がない場合、孤立した点を黒く塗ることはできないので、答えはNoとなる。
# 全部の'#'の点について、その上下左右のいずれかに'#'が見つかれば、答えはYesとなる。

# 4隅
if S[0][0] == '#' and S[0][1] == '.' and S[1][0] == '.':
    ans = 'No'
    endFlg = True
if S[0][W - 1] == '#' and S[0][W - 2] == '.' and S[1][W - 1] == '.':
    ans = 'No'
    endFlg = True
if S[H - 1][0] == '#' and S[H - 1][1] == '.' and S[H - 2][0] == '.':
    ans = 'No'
    endFlg = True
if S[H - 1][W - 1] == '#' and S[H - 1][W - 2] == '.' and S[H - 2][W - 1] == '.':
    ans = 'No'
    endFlg = True

# 上辺
if endFlg != True:
    for j in range(1, W-1):
        if S[0][j] == '#':
            if (S[1][j + 1] == '.' and S[0][j + 2] == '.' and S[0][j] == '.'):
                ans = 'No'
                endFlg = True

if endFlg != True:
    # 下辺
    for j in range(1, W-1):
        if S[0][j] == '#':
            if (S[H-2][j+1] == '.' and S[H-1][j + 2] == '.' and S[H-1][j] == '.'):
                ans = 'No'
                endFlg = True

if endFlg != True:
    # 左辺
    for i in range(1,H-2):
        if S[i][0] == '#':
            if (S[i+1][1] == '.' and S[i][0] == '.' and S[i+2][0] == '.'):
                ans = 'No'
                endFlg = True

if endFlg != True:
    # 右辺
    if i in range(1, H-2):
        if S[i][W-1] == '#':
            if (S[i+1][W-2] == '.' and S[i][W-1] == '.' and S[i+2][W-1] == '.'):
                ans = 'No'
                endFlg = True

# 中の領域について探索
for i in range(1, H-1):
    for j in range(1, W-1):
        if S[i][j] == '#':
            if (S[i - 1][j] == '.' and S[i][j + 1] == '.' and S[i + 1][j] == '.' and S[i][j - 1] == '.'):
                ans = 'No'
                endFlg = True
                break
    if endFlg == True:
        break

print(ans)

Buggy submission (verdict: Runtime Error):
# coding: utf-8

H, W = map(int, input().split())
S = []
for i in range(H):
    S.append(list(input()))
ans = 'Yes'
endFlg = False

# 4隅
if S[0][0] == '#' and S[0][1] == '.' and S[1][0] == '.':
    ans = 'No'
    endFlg = True
if S[0][W - 1] == '#' and S[0][W - 2] == '.' and S[1][W - 1] == '.':
    ans = 'No'
    endFlg = True
if S[H - 1][0] == '#' and S[H - 1][1] == '.' and S[H - 2][0] == '.':
    ans = 'No'
    endFlg = True
if S[H - 1][W - 1] == '#' and S[H - 1][W - 2] == '.' and S[H - 2][W - 1] == '.':
    ans = 'No'
    endFlg = True

# 上辺
if endFlg != True:
    for j, c in enumerate(S[0][1:W - 1]):
        if c == '#':
            if (S[1][j+1] == '.' and S[0][j + 2] == '.' and S[0][j] == '.'):
                ans = 'No'
                endFlg = True

if endFlg != True:
    # 下辺
    for j, c in enumerate(S[H - 1][1:W - 1]):
        if c == '#':
            if (S[H-2][j+1] == '.' and S[H-1][j + 2] == '.' and S[H-1][j] == '.'):
                ans = 'No'
                endFlg = True

if endFlg != True:
    # 左辺
    for i, c in enumerate(S[1:H - 2][0]):
        if c == '#':
            if (S[i+1][1] == '.' and S[i][0] == '.' and S[i+2][0] == '.'):
                ans = 'No'
                endFlg = True

if endFlg != True:
    # 右辺
    for i, c in enumerate(S[1:H - 2][W - 2]):
        if c == '#':
            if (S[i+1][W-2] == '.' and S[i][W-1] == '.' and S[i+2][W-1] == '.'):
                ans = 'No'
                endFlg = True

for i, r in enumerate(S[1:H - 1][1:W - 2]):
    for j, c in enumerate(r):
        if c == '#':
            if (S[i - 1][j] == '.' and S[i][j + 1] == '.' and S[i + 1][j] == '.' and S[i][j - 1] == '.'):
                ans = 'No'
                endFlg = True
                break
    if endFlg == True:
        break

print(ans)