diff --git a/Backtracking/Code/SudokuSolver.py b/Backtracking/Code/SudokuSolver.py new file mode 100644 index 0000000..aedb4b9 --- /dev/null +++ b/Backtracking/Code/SudokuSolver.py @@ -0,0 +1,55 @@ +def check(grid, row, col, i): + for _ in range(9): + if grid[row][_] == i: + return False + + for _ in range(9): + if grid[_][col] == i: + return False + ini_row = row - row % 3 + ini_col = col - col % 3 + for _ in range(3): + for k in range(3): + if grid[ini_row+_][ini_col+k] == i: + return False + return True + + +def helper(grid, row, col): + if row == 9: + return True + if col == 9: + return helper(grid, row+1, 0) + if grid[row][col] != 0: + return helper(grid, row, col+1) + + for _ in range(1, 10): + if check(grid, row, col, _): + grid[row][col] = _ + if helper(grid, row, col+1): + return True + grid[row][col] = 0 + return False + + +def SolveSudoku(grid): + return helper(grid, 0, 0) + + +def printGrid(grid): + SolveSudoku(grid) + for i in range(9): + for j in range(9): + print(grid[i][j], end=" ") + + +grid = [[3, 0, 6, 5, 0, 8, 4, 0, 0], + [5, 2, 0, 0, 0, 0, 0, 0, 0], + [0, 8, 7, 0, 0, 0, 0, 3, 1], + [0, 0, 3, 0, 1, 0, 0, 8, 0], + [9, 0, 0, 8, 6, 3, 0, 0, 5], + [0, 5, 0, 0, 9, 0, 6, 0, 0], + [1, 3, 0, 0, 0, 0, 2, 5, 0], + [0, 0, 0, 0, 0, 0, 0, 7, 4], + [0, 0, 5, 2, 0, 6, 3, 0, 0]] +printGrid(grid) diff --git a/Backtracking/Code/nQueens.py b/Backtracking/Code/nQueens.py new file mode 100644 index 0000000..9602681 --- /dev/null +++ b/Backtracking/Code/nQueens.py @@ -0,0 +1,49 @@ +ans = [] + + +def isSafe(board, i, j, n): + for u in range(n): + if board[u][j] == 1: + return False + + for q, w in zip(range(i-1, -1, -1), range(j-1, -1, -1)): + if board[q][w] == 1: + return False + for q, w in zip(range(i-1, -1, -1), range(j+1, n, 1)): + if board[q][w] == 1: + return False + return True + + +def helper(board, n, r): + if r == n: + temp = [] + for k in range(n): + for l in range(n): + if board[k][l] == 1: + temp.append(l+1) + ans.append(temp.copy()) + return + + for p in range(n): + if (isSafe(board, r, p, n)): + board[r][p] = 1 + helper(board, n, r+1) + board[r][p] = 0 + + +def nQueen(n): + + board = [] + for _ in range(n): + my_list = [] + for j in range(n): + my_list.append(0) + board.append(my_list) + # print(board) + helper(board, n, 0) + print(ans) + + + # helper(n) +nQueen(3) diff --git a/Backtracking/Code/ratInAMaze.py b/Backtracking/Code/ratInAMaze.py new file mode 100644 index 0000000..3e27dd0 --- /dev/null +++ b/Backtracking/Code/ratInAMaze.py @@ -0,0 +1,46 @@ +my_array = [] + + +def isSafe(input, visited, S_x, S_y, n): + if S_x >= 0 and S_y >= 0 and S_x < n and S_y < n and input[S_x][S_y] == 1 and visited[S_x][S_y] == 0: + return True + return False + + +def helper(input, visited, n, S_x, S_y, temp): + if S_x == n-1 and S_y == n-1: + print(temp) + my_array.append(temp) + return + visited[S_x][S_y] = 1 + if(isSafe(input, visited, S_x+1, S_y, n)): + helper(input, visited, n, S_x+1, S_y, temp + "D") + if(isSafe(input, visited, S_x, S_y-1, n)): + helper(input, visited, n, S_x, S_y-1, temp + "L") + if(isSafe(input, visited, S_x, S_y+1, n)): + helper(input, visited, n, S_x, S_y+1, temp + "R") + if(isSafe(input, visited, S_x-1, S_y, n)): + helper(input, visited, n, S_x-1, S_y, temp + "U") + + visited[S_x][S_y] = 0 + return + + +def rat_in_a_maze(input, n): + visited = [] + for _ in range(n): + my_list = [] + for j in range(n): + my_list.append(0) + visited.append(my_list) + print(visited) + if input[0][0] == 0: + return + else: + helper(input, visited, n, 0, 0, "") + + +input = [[1, 0, 0, 0], [1, 1, 0, 1], [1, 1, 0, 0], [0, 1, 1, 1]] + +rat_in_a_maze(input, len(input)) +print(my_array)