9663号nQueen.py
9663号nQueen。py
BackTrackingで解答します.
「希望のあるノードのみをチェックし、迷わなければ親ノードに戻って探索を続けます」
問題の概要
クイーンは上下左右の対角線で移動できます
0.すべての状況を考慮した数量
すべての可能なシーケンスで、どのように答えを検索しますか?
N=4仮定、
皇后ごとに1列しか来られないからです.
検査が必要なものはすべて4 4 4*4=256種類あります.->ナビゲーションが不要になるまでナビゲーション効率が低下
1.バックトレース
dfs、bfsを使用して、特定のノードの潜在力を確認します.
希望がない場合は、そのノードの親ノードに戻り、次のノードを検索するプロセスを続行します.
可能性チェックルール
状態空間ツリー(N=4)
import sys
input = sys.stdin.readline
n = int(input())
def dfs(row):
global count
if row == n:
count += 1 # 백트래킹을 통해서 마지막까지 도달했기 때문에 count += 1
return
for col in range(n):
queen[row] = col # 행에 모든 경우의 수를 넣는다. (row, col) 위치에 퀸을 놓으면
for i in range(row): # 대각선과 열에 퀸이 있는 확인
if queen[i] == queen[row] or abs(queen[i]-queen[row]) == row - i:
break
else:
# `else :` 는 break 를 만나지 않고 무사히 `for i in range (row)`을 통과하면 실행된다.
# 즉 퀸이 현재 위치에 있어도 된다는 의미로 검사를 진행한다.
dfs(row + 1)
queen = [0] * n
count = 0
dfs(0)
print(count)
Reference
この問題について(9663号nQueen.py), 我々は、より多くの情報をここで見つけました https://velog.io/@kingggyu/9663번nQueen.pyテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol