@@ -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+
0 commit comments