Leetcode51 n皇后 DFS+回溯(模板题)
生活随笔
收集整理的這篇文章主要介紹了
Leetcode51 n皇后 DFS+回溯(模板题)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
n皇后
鏈接
n皇后問題是說給定n*n的棋盤和n個(gè)皇后,求出所有合理的擺法。所謂合理的擺法是說n個(gè)皇后可以平安無事的處于棋盤上。國際象棋中皇后可以橫著走、豎著走、斜著走,只要處于這些位置,皇后就會(huì)殺掉別人。
| solveQueens(int n) | n*n的方格,給出n皇后的解決方案 |
| DFS(vector &board,int row) | 深搜+回溯找到所有的解,存在result中 |
| isValid(vector &board,int row,int col) | 判斷(row,col)位置能否放置皇后 |
回顧深搜的代碼框架
DFS(){//退出條件遍歷{//不合法剪枝,n皇后是列,左上方、右上方不能出現(xiàn)//做出選擇,n皇后是在(row,col)放置皇后//下一次決策遞歸//撤銷選擇} }DFS調(diào)用
調(diào)用的時(shí)候給定路徑board和選擇列表row,初始時(shí)即為DFS(board,0),棋盤全是空的,從第零行開始遍歷。
代碼
class Solution { public:vector<vector<string> > result;vector<vector<string>> solveNQueens(int n) {vector<string> board(n,string(n,'.'));//賦值n個(gè)點(diǎ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)這個(gè)位置不能放置continue;//做出選擇:是該位置(row,col)放置皇后Qboard[row][col]='Q';//下一次決策DFS(board,row+1);//撤銷選擇board[row][col]='.';}} //判斷(row,col)這個(gè)位置是否為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')//固定列,差點(diǎn)寫錯(cuò)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;} };總結(jié)
以上是生活随笔為你收集整理的Leetcode51 n皇后 DFS+回溯(模板题)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 沃尔沃xc60是哪个国家的车型 来自瑞典
- 下一篇: HDU-4277USACO ORZ深搜+