-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheight_queen_solution.py
58 lines (45 loc) · 1.64 KB
/
eight_queen_solution.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
def unsafe_queens(arr):
unsafe_queens_arr = []
for i in range(len(arr)):
for j in range(len(arr[i])):
if(arr[i][j] == 1 and is_unsafe(arr, i, j)):
unsafe_queens_arr.append([i, j, True])
elif(arr[i][j] == 1):
unsafe_queens_arr.append([i, j, False])
return unsafe_queens_arr
def is_unsafe(arr, x, y):
for i in range(len(arr)):
if(i != y and arr[x][i] == 1):
return True
if(i != x and arr[i][y] == 1):
return True
for i in range(1, len(arr)):
if(x + i < len(arr) and y + i < len(arr) and arr[x + i][y + i] == 1):
return True
if(x - i > -1 and y - i > -1 and arr[x - i][y - i] == 1):
return True
if(x + i < len(arr) and y - i > -1 and arr[x + i][y - i] == 1):
return True
if(x - i > -1 and y + i < len(arr) and arr[x - i][y + i] == 1):
return True
def all_safe_queens(arr):
for i in range(len(arr)):
for j in range(len(arr[i])):
if(arr[i][j] == 1 and is_unsafe(arr, i, j)):
return False
return True
def is_safe(i, j, right_diagonal_arr, left_diagonal_arr, right_diagonal_arr_look, left_diagonal_arr_look, row_arr):
if right_diagonal_arr_look[right_diagonal_arr[i][j]] or left_diagonal_arr_look[left_diagonal_arr[i][j]] or row_arr[i]:
return False
return True
def column_occupied(arr, j):
for i in range(j):
if arr[i][j] == 1:
return True
return False
def queen_counter(arr):
counter = 0
for i in arr:
for j in i:
counter = counter + j
return counter