B - 埋め立て
解法
深さ優先探索の典型的な問題。実装は蟻本を参考にしました。
関数dfsはまずスタート位置を"x"にして、スタート位置から移動できる先が"o"ならそこをスタート地点にしてまたdfs、という再帰になっています。
(x,y)のコマを埋め立てたときに島が一つになっている場合は、dfs(x,y)が終わると地図が全部"x"で埋まります(島が一つでない場合は"o"が残る)。これを関数checkでチェック。
スタート地点は10*10箇所しかないので全部試す。
# ARC031B
import copy
field = []
for p in range(10):
field.append([str(x) for x in str(input())])
temp = copy.deepcopy(field)
dx = [1,0,-1,0]
dy = [0,1,0,-1]
def dfs(x,y):
temp[x][y] = "x"
for p in range(4):
nx = x + dx[p]
ny = y + dy[p]
if 0<=nx<10 and 0<=ny<10 and temp[nx][ny]=="o":
dfs(nx,ny)
return
def check():
for p in range(10):
for q in range(10):
if temp[p][q] == "o":
return False
return True
for p in range(10):
for q in range(10):
temp = copy.deepcopy(field)
dfs(p,q)
if check() == True:
print("YES")
exit()
print("NO")
0 件のコメント:
コメントを投稿