diff --git a/nqueens.py b/nqueens.py new file mode 100644 index 00000000..beb4ce33 --- /dev/null +++ b/nqueens.py @@ -0,0 +1,50 @@ +def solveNQueens(self, n: int) -> List[List[str]]: + self.result=[] + board=[[False]*n for _ in range(n)] + self.helper(board,0,n) + return self.result + +def helper(self,board,row,n): + if row==n: + list_=[] + for i in range(n): + sb=[] + for j in range(n): + if board[i][j]: + sb.append("Q") + else: + sb.append(".") + list_.append("".join(sb)) + self.result.append(list_) + return + for j in range(n): + if self.issafe(board,row,j,n): + board[row][j]=True + self.helper(board,row+1,n) + board[row][j]=False + +def issafe(self,board,i,j,n): + r=i + c=j + while r>=0: + if board[r][c]: + return False + r-=1 + r=i + c=j + while r>=0 and c>=0: + if board[r][c]: + return False + r-=1 + c-=1 + r=i + c=j + while r>=0 and c bool: + self.dirs=[[-1,0],[0,-1],[0,1],[1,0]] + self.m=len(board) + self.n=len(board[0]) + + for i in range(self.m): + for j in range(self.n): + if self.dfs(board,i,j,word,0): + return True + return False + +def dfs(self,board,i,j,word,idx): + if idx==len(word): + return True + if i<0 or j<0 or i>=self.m or j>=self.n or board[i][j]=='#': + return False + if word[idx]!= board[i][j]: + return False + board[i][j]='#' + + for dir in self.dirs: + r=dir[0]+i + c=dir[1]+j + + if self.dfs(board,r,c,word,idx+1): + return True + board[i][j]=word[idx] + return False