[伯俊]9663 N-Queen(Python)


質問する


N-Queen問題の大きさはN× これは,N個のチェス盤上のN個の皇后が互いに攻撃し合うことができない問題である.
Nが与えられた場合,解放後の方法の数を計算するプログラムを作成してください.

入力


1行目はNです.(1 ≤ N < 15)

しゅつりょく


1行目でN個の皇后が互いに攻撃できない場合は、数字を出力します.

に答える


Qeenの各行の位置を図に入れ、その位置にアクセスしたか、対角線であるかを確認します.

コード#コード#

def dfs(depth):
    global count
    if depth == n:
        count += 1
        return
    
    for i in range(n):
        if visited[i]==0: # 해당 자리에 퀸이 존재하는지 확인
            
            graph[depth] = i # 각 행마다 위치하는 퀸의 자리
            
            t=True
            for j in range(depth):   # graph의 개수만큼 for문을 돌려야하지만 어차피 depth랑 개수 똑같음
                if abs(graph[depth]-graph[j])==abs(depth-j):
                    t=False
                    break
            if t:
                print(graph,depth)
                visited[i] = 1
                dfs(depth+1)
                visited[i] = 0            

n = int(input())

graph = [0]*n
visited = [0]*n

count=0
dfs(0)