AEKJOON #9663 N-Queen (backtracking, DFS) - python
6081 ワード
N-Queen
ソース:白駿#9663
タイムアウトメモリ制限10秒128 MB
質問する
N-Queen問題の大きさはN× これは,N個のチェス盤上のN個の皇后が互いに攻撃し合うことができない問題である.
Nが与えられた場合,解放後の方法の数を計算するプログラムを作成してください.
入力
1行目はNです.(1 ≤ N < 15)
しゅつりょく
1行目でN個の皇后が互いに攻撃できない場合は、数字を出力します.
I/O例
入力例1
8
サンプル出力1
92
に答える
の意見を打診
place 함수
)をどのように記述するかです.同じ列
(board[j] == i)
(abs(board[j]-i) == abs(j-k))
backtrack
において、for文を0からn−1に遷移しplace関数を通過すると、kが終点に到達したか否かを判別して到着するとcount
が1増加し、そうでなければkに1を加えた値が再帰的に戻される.python code
# 백준 9663번 N-Queen
from sys import stdin
input = stdin.readline
n = int(input())
board = [-1]*n
count = 0
def backtrack(board, k, n):
global count
for i in range(n):
if place(board, k, i):
board[k] = i
if k == n-1:
count += 1
# print('chess :', end=" ")
# for j in range(n):
# print(board[j], end=" ")
# print()
return
else:
backtrack(board, k+1, n)
def place(board, k, i):
for j in range(k):
if (board[j] == i) or (abs(board[j]-i) == abs(j-k)):
return False
return True
backtrack(board, 0, n)
print(count)
Reference
この問題について(AEKJOON #9663 N-Queen (backtracking, DFS) - python), 我々は、より多くの情報をここで見つけました https://velog.io/@nathan29849/BAEKJOON-9663-N-Queen-backtracking-DFS-pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol