当前位置: 首页 > 后端技术 > Python

力扣-0051.N-QueensNQueen【Python】

时间:2023-03-25 20:52:47 Python

ProblemLeetCoden-queenspuzzle是将n个皇后放在n×n的棋盘上使得没有两个皇后互相攻击的问题。给定一个整数n,返回所有不同的解决方案到n皇后拼图。每个解决方案都包含n皇后位置的独特棋盘配置,其中“Q”和“。”两者分别表示一个皇后和一个空位。示例:输入:4输出:[[".Q..",//Solution1"...Q","Q...","..Q."],["..Q.",//Solution2"Q...","...Q",".Q.."]]解释:如图所示,4皇后难题存在两个不同的解决方案多于。×n个棋盘,皇后不能互相攻击。上图显示了8皇后问题的解决方案。给定一个整数n,返回所有不同的n皇后解。每个解决方案都包含针对n皇后问题的显式棋子放置方案,其中“Q”和“.”分别代表皇后区和开放空间。示例:输入:4输出:[[".Q..",//解决方案1"...Q","Q...","..Q."],["..Q.",//Solution2"Q...","...Q",".Q.."]]解释:4皇后问题有两种不同的解决方案。提示:皇后不能互相攻击,也就是说:任意两个皇后不能在同一条水平线、垂直线或对角线上。idea回溯回溯模板:res=[]defbacktrack(path,selectionlist):如果满足结束条件:result.add(path)returnforselectioninselectionlist:makeselectionbacktrack(path,selectionlist)undoselectionPython3输入importListclass解决方案的代码:defsolveNQueens(self,n:int)->List[List[str]]:res=[]#一维列表board=['.'*nfor_inrange(n)]defisValid(board,row,col):"""检查是否有互相冲突的皇后"""#检查行row和columncol是否可以放一个皇后#就可以了consider<=row,因为后面的棋盘是空的forrow_indexinrange(row):#判断当前行是否有皇后ifrow_index==row:if'Q'inboard[row_index]:returnFalse#判断是否有皇后col列在遍历每一行时都有皇后if'Q'==board[row_index][col]:returnFalse#判断皇后是否放在左上角tmp_row,tmp_col=row,colwhiletmp_row>0andtmp_col>0:tmp_row-=1tmp_col-=1if'Q'inboard[tmp_row][tmp_col]:returnFalse#判断皇后是否放在右上方tmp_row,tmp_col=row,colwhiletmp_row>0andtmp_col