日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Leetcode51 n皇后 DFS+回溯(模板题)

發布時間:2025/4/5 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode51 n皇后 DFS+回溯(模板题) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

n皇后
鏈接
n皇后問題是說給定n*n的棋盤和n個皇后,求出所有合理的擺法。所謂合理的擺法是說n個皇后可以平安無事的處于棋盤上。國際象棋中皇后可以橫著走、豎著走、斜著走,只要處于這些位置,皇后就會殺掉別人。

函數
solveQueens(int n)n*n的方格,給出n皇后的解決方案
DFS(vector &board,int row)深搜+回溯找到所有的解,存在result中
isValid(vector &board,int row,int col)判斷(row,col)位置能否放置皇后

回顧深搜的代碼框架

DFS(){//退出條件遍歷{//不合法剪枝,n皇后是列,左上方、右上方不能出現//做出選擇,n皇后是在(row,col)放置皇后//下一次決策遞歸//撤銷選擇} }

DFS調用
調用的時候給定路徑board和選擇列表row,初始時即為DFS(board,0),棋盤全是空的,從第零行開始遍歷。

代碼

class Solution { public:vector<vector<string> > result;vector<vector<string>> solveNQueens(int n) {vector<string> board(n,string(n,'.'));//賦值n個點DFS(board,0);//路徑board,選擇列表:rowreturn result;}void DFS(vector<string> &board,int row){//exitif(row==board.size()){result.push_back(board);return;}int n=board[0].size();//column//for(int col=0;col<n;++col){//不合法if(!isValid(board,row,col))//棋盤(row,col)這個位置不能放置continue;//做出選擇:是該位置(row,col)放置皇后Qboard[row][col]='Q';//下一次決策DFS(board,row+1);//撤銷選擇board[row][col]='.';}} //判斷(row,col)這個位置是否為Qbool isValid(vector<string> &board,int row,int col){int n=board.size();//size of row//如果該列不能放for(int i=0;i<n;i++){if(board[i][col]=='Q')//固定列,差點寫錯return false;}//如果左上方不能放for(int i=row-1,j=col-1;i>=0&&j>=0;i--,j--){if(board[i][j]=='Q')return false;}//如果右上方不能放for(int i=row-1,j=col+1;i>=0&&j<board[0].size();i--,j++){if(board[i][j]=='Q')return false;}return true;} };

總結

以上是生活随笔為你收集整理的Leetcode51 n皇后 DFS+回溯(模板题)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。