再帰関数の勉強

https://atcoder.jp/contests/arc001/submissions/2545631

再帰関数を使った。

M = [list(input()) for i in range(8)]

def check(M,y,x):
  for i in range(1,8):
    yl = [y  ,y  ,y-i,y+i,y-i,y-i,y+i,y+i]
    xl = [x-i,x+i,x  ,  x,x-i,x+i,x-i,x+i]
    
    for i2, j2 in zip(yl,xl): 
      if 0<=i2 <=7 and 0<=j2<=7 and M[i2][j2] == "Q":
        return 0
  return 1

def dfs(M,q): #再帰関数
  if q == 0:#条件を満たしたら
    for m in M:
      print("".join(m))
    exit()

  for y in range(8):
    for x in range(8):
      if M[y][x] != "Q" and check(M,y,x) == 1:
        M[y][x] = "Q" #Qにして探索
        dfs(M,q-1)
        M[y][x] = "." #駄目なら戻す

        
for y in range(8):
  for x in range(8):
    if M[y][x] == "Q" and check(M,y,x) == 0:
      print("No Answer")
      exit()

dfs(M,5)
print("No Answer")