diff --git a/chap2/chap2.py b/chap2/chap2.py new file mode 100644 index 0000000..1dd182d --- /dev/null +++ b/chap2/chap2.py @@ -0,0 +1,46 @@ +def searchSubsets(k, n, subset): + if k == n+1: + # process subset + print(subset) + else: + # include k in the subset + subset.append(k) + searchSubsets(k+1,n,subset) + subset.pop() + # don’t include k in the subset + searchSubsets(k+1, n, subset) + +def searchPermutations(n,permutation,chosen): + if len(permutation) == n: + print(permutation) + else: + for i in range (1,n+1): + if chosen[i]: + continue + chosen[i] = True + permutation.append(i) + searchPermutations(n,permutation,chosen) + chosen[i] = False + permutation.pop() + +def searchQueens(y, n, col, diag1, diag2): + if y == n: + return 1 # Return 1 to count a valid arrangement + count = 0 + for x in range(n): + if col[x] or diag1[x + y] or diag2[x - y + n - 1]: + continue + col[x] = diag1[x + y] = diag2[x - y + n - 1] = True + count += searchQueens(y + 1, n, col, diag1, diag2) + col[x] = diag1[x + y] = diag2[x - y + n - 1] = False + return count + +if __name__ == "__main__": + searchSubsets(1,4,list[int]()) + searchPermutations(4,list[int](),[False]*5) + n = 16 # Replace with the size of the board + col = [False] * n + diag1 = [False] * (2 * n - 1) + diag2 = [False] * (2 * n - 1) + solution_count = searchQueens(0, n, col, diag1, diag2) + print(solution_count) \ No newline at end of file