diff --git a/Problem 2.py b/Problem 2.py new file mode 100644 index 00000000..6ef302e8 --- /dev/null +++ b/Problem 2.py @@ -0,0 +1,35 @@ +ROWS, COLS = len(board), len(board[0]) + sofar = set() + + def dfs(i, j, index): + if index >= len(word): + return True + + if not 0 <= i < ROWS or not 0 <= j < COLS: + return False + + if board[i][j] != word[index]: + return False + + if (i, j) in sofar: + return False + + sofar.add((i, j)) + res = ( + dfs(i + 1, j, index + 1) or + dfs(i - 1, j, index + 1) or + dfs(i, j + 1, index + 1) or + dfs(i, j - 1, index + 1) + ) + + if not res: + sofar.remove((i, j)) + + return res + + for i in range(ROWS): + for j in range(COLS): + if dfs(i, j, 0): # dfs with backtracking + return True + + return False diff --git a/Problem1.py b/Problem1.py new file mode 100644 index 00000000..81c9cd7c --- /dev/null +++ b/Problem1.py @@ -0,0 +1,51 @@ +class Solution: + def solveNQueens(self, n: int) -> List[List[str]]: + + res = [] + def okay_to_place(r,c, sofar): + if not sofar: + return True + restricted_rows = set([i for i, j in sofar]) + restricted_cols = set([j for i, j in sofar]) + + if r in restricted_rows or c in restricted_cols: #checked for same row or same col + return False + + for i, j in sofar: + if abs(i-r) == abs(j-c): + return False + return True #or False + + def form_a_board(sofar): + board = ["."*n for _ in range(n)] + for i, j in sofar: + board[i][j] = "Q" + return board + + def dfs(r, sofar, q): + if q == 0: + #res.append(sofar.copy()) + #print(sofar) + board = [["."]*n for _ in range(n)] + for i, j in sofar: + board[i][j] = "Q" + + board = ["".join(i) for i in board] + res.append(board) + return + if not 0 <= r < n: + return + + + for c in range(n): + if okay_to_place(r, c, sofar) and q > 0: + sofar.append((r,c)) + dfs(r+1, sofar, q-1) + sofar.pop() + + return + + dfs(0, [], n) + return res + +