teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2020/11/10 18:42

投稿

episteme
episteme

スコア16612

answer CHANGED
@@ -22,4 +22,31 @@
22
22
  ```
23
23
  同じ数が 右上がりナナメ に並びます
24
24
 
25
- これを使って"斜めのチェック"をやってます。
25
+ これを使って"斜めのチェック"をやってます。
26
+
27
+ [追記] コメントつけてみた
28
+ ```Python
29
+ N = 8
30
+
31
+ # 斜めのチェック
32
+ def check(x, col):
33
+ for i, row in enumerate(reversed(col)): #ここがわかりません
34
+ if (x + i + 1 == row) or (x - i - 1 == row):
35
+ return False #配置不可
36
+ return True
37
+
38
+ # 8-queenのルールを満足するcolを生成する
39
+ def search(col):
40
+ if len(col) == N: # colの要素数がN個に達したら
41
+ print(col) # プリントして
42
+ return # 終了
43
+
44
+ for i in range(N): # i = 0, 1, ... N-1 に対し
45
+ if i not in col: # col中にiが含まれないときに限り
46
+ if check(i, col): # そのiをcolに追加しても8-queen のルールに反しないなら
47
+ col.append(i) # colの末尾に追加し
48
+ search(col) # 検索を続け
49
+ col.pop() # colの末尾から取り除く(次のiを試みる)
50
+
51
+ search([])
52
+ ```