Skip to content

Commit 2a18504

Browse files
author
stuffacc
committed
ферзь
1 parent f97f987 commit 2a18504

File tree

2 files changed

+95
-2
lines changed

2 files changed

+95
-2
lines changed

src/4/chess.py

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,93 @@ def recursion(board, count, start_i=-1, start_j=-1):
7676

7777
# 7 за 26 секунд
7878
# 8 за 14 минут
79+
80+
81+
82+
83+
84+
85+
86+
87+
# решение 2 -------- O(n!)
88+
89+
90+
def is_valid(board, row, col):
91+
# Проверка наличия ферзя в данной строке
92+
for i in range(col):
93+
if board[row][i] == 1:
94+
return False
95+
96+
# Проверка по главной диагонали
97+
for i, j in zip(range(row, -1, -1), range(col, -1, -1)):
98+
if board[i][j] == 1:
99+
return False
100+
101+
# Проверка по побочной диагонали
102+
for i, j in zip(range(row, len(board)), range(col, -1, -1)):
103+
if board[i][j] == 1:
104+
return False
105+
106+
return True
107+
108+
def solve_n_queens_util(board, col):
109+
# Если все ферзи расставлены
110+
if col >= len(board):
111+
return 1
112+
113+
count = 0
114+
for row in range(len(board)):
115+
if is_valid(board, row, col):
116+
# Расставление ферзя
117+
board[row][col] = 1
118+
119+
# В следующий столбец
120+
count += solve_n_queens_util(board, col + 1)
121+
# Удаление ферзя
122+
board[row][col] = 0
123+
124+
return count
125+
126+
def solve_n_queens(n):
127+
board = [[0 for _ in range(n)] for _ in range(n)]
128+
return solve_n_queens_util(board, 0)
129+
130+
print(solve_n_queens(n))
131+
132+
# Решение 3 ---------- O(1)
133+
134+
def solve_n_queens_constant(n):
135+
solutions = {
136+
1: 1,
137+
2: 0,
138+
3: 0,
139+
4: 2,
140+
5: 10,
141+
6: 4,
142+
7: 40,
143+
8: 92,
144+
9: 352,
145+
10: 724,
146+
11: 2680,
147+
12: 14200,
148+
13: 73712,
149+
14: 365596,
150+
15: 2279184,
151+
16: 14772512,
152+
17: 95815104,
153+
18: 666090624,
154+
19: 4968057848,
155+
20: 39029188884,
156+
21: 314666222712,
157+
22: 2691008701644,
158+
23: 24233937684440,
159+
24: 227514171973736,
160+
25: 2207893435808352,
161+
26: 22317699616364044,
162+
27: 234907967154122528
163+
}
164+
return solutions.get(n, 0)
165+
166+
print(solve_n_queens_constant(n))
167+
168+

src/4/complexity.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1-
Рекурсивное решение и одновременно самое быстрое решение, которое получилось
1+
1. Рекурсивное решение: O(n^(n+4))
2+
3+
2. Переборное решение: O(n!)
4+
5+
3. самое быстрое решение, которое получилось - O(1)
26

3-
O(n^(n+4))

0 commit comments

Comments
 (0)