diff --git a/Backtracking/Knights_tour.py b/Backtracking/Knights_tour.py new file mode 100644 index 0000000..6451184 --- /dev/null +++ b/Backtracking/Knights_tour.py @@ -0,0 +1,23 @@ +def knights_tour(n, row, col): + visited = [[False]*n for i in range(n)] + res = [] + def path_gen(path,r,c,visited,step): + if r < 0 or c < 0 or r >= n or c >= n or visited[r][c]: + return + if step == n*n: + res.append(path + f'({r},{c})') + return + visited[r][c] = True + path_gen(path + f'({r},{c}) ', r - 2, c + 1, visited, step+1) + path_gen(path + f'({r},{c}) ', r - 2, c - 1, visited, step+1) + path_gen(path + f'({r},{c}) ', r - 1, c + 2, visited, step+1) + path_gen(path + f'({r},{c}) ', r - 1, c - 2, visited, step+1) + path_gen(path + f'({r},{c}) ', r + 2, c + 1, visited, step+1) + path_gen(path + f'({r},{c}) ', r + 2, c - 1, visited, step+1) + path_gen(path + f'({r},{c}) ', r + 1, c + 2, visited, step+1) + path_gen(path + f'({r},{c}) ', r + 1, c - 2, visited, step+1) + visited[r][c] = False + path_gen('', row, col,visited,1) + return res + +print(knights_tour(5, 2, 2)) \ No newline at end of file diff --git a/Backtracking/N_queens.py b/Backtracking/N_queens.py new file mode 100644 index 0000000..49d81d2 --- /dev/null +++ b/Backtracking/N_queens.py @@ -0,0 +1,26 @@ +def n_queens(n): + res = [] + board = [['.']*n for i in range(n)] + cols = set() + pdiags = set() + ndiags = set() + def gen(r): + if r == n: + res.append([''.join(row) for row in board]) + return + for c in range(n): + if c in cols or r+c in pdiags or r-c in ndiags: + continue + board[r][c] = 'Q' + cols.add(c) + pdiags.add(r+c) + ndiags.add(r-c) + gen(r + 1) + board[r][c] = '.' + cols.remove(c) + pdiags.remove(r+c) + ndiags.remove(r-c) + gen(0) + return res + +print(n_queens(8)) \ No newline at end of file