# 縦を圧縮 lst = [] # 縦を圧縮したデータ pre = ''# 1行前のデータ(初期化) for line in mp.split(): if pre != line: lst.append(line) pre = line # 横を圧縮 pre = ''# 1列前のデータ(初期化) w = 0 for col inrange(len(lst[0])): # 列ごとにループ row = [l[col] for l in lst] # 1列分のデータを取得 line = ''.join(row) if pre != line: for y, s inenumerate(list(line)): mp_compress[w, y] = s w += 1 pre = line
print(' 【 圧縮後 】 ') for y inrange(len(lst)): for x inrange(w): print(mp_compress[x,y], end='') print()
# 深さ優先探索(Depth-First Search) defdfs(x, y): global mp_compress # 今いるところを#に置き換え mp_compress[x, y] = '#' for dx, dy in [(1,0), (-1,0), (0,1), (0,-1)]: pos = (x + dx, y + dy) if pos in mp_compress and mp_compress[pos] == '.': dfs(pos[0], pos[1]) # 領域を数える cnt = 0 for pos,v in mp_compress.items(): if v == '.': dfs(pos[0], pos[1]) cnt += 1 print('解:', cnt)