leetcode 51: N-Queens
来源:互联网 发布:mysql 分区 分表 编辑:程序博客网 时间:2024/05/21 19:40
DFS method:
class Solution {public: vector<vector<string>> solveNQueens(int n) { vector<vector<string> > res; vector<string> board; for(int i=0;i<n;i++) { string s; for(int j=0;j<n;j++) s+='.'; board.push_back(s); } solver(res,board,0,n); return res; } void solver(vector<vector<string> >& res, vector<string> board, int row, int n) { if(row==n) res.push_back(board); for(int j=0;j<n;j++) { if(isValid(board,row,j,n)) { board[row][j]='Q'; solver(res,board,row+1,n); board[row][j]='.'; } } } bool isValid(vector<string> board, int row, int col, int n) { int i,j; for(i=0;i<row;i++) if(board[i][col]=='Q') return false; for(i=row-1,j=col-1;i>=0&&j>=0;i--,j--) if(board[i][j]=='Q') return false; for(i=row-1,j=col+1;i>=0&&j<n;i--,j++) if(board[i][j]=='Q') return false; return true; }};
Updated version, using 3 arrays to check the validation. The three arrays are for the column, 45 degree line and 135 degree line.
class Solution {public: vector<vector<string>> solveNQueens(int n) { vector<vector<string> > res; vector<string> board(n,string(n,'.')); vector<bool> v_col(n,0); vector<bool> v_45(2*n-1,0),v_135(2*n-1,0); helper(n,0,res,board,v_col,v_45,v_135); return res; } void helper(int n,int row,vector<vector<string> >& res,vector<string>& board,vector<bool>& v_col,vector<bool>& v_45,vector<bool>& v_135) { if(row==n) res.push_back(board); for(int i=0;i<n;i++) { int idx_col=i,idx_45=n-1-row+i,idx_135=row+i; if(v_col[idx_col]==0&&v_45[idx_45]==0&&v_135[idx_135]==0) { board[row][i]='Q'; v_col[idx_col]=1; v_45[idx_45]=1; v_135[idx_135]=1; helper(n,row+1,res,board,v_col,v_45,v_135); board[row][i]='.'; v_col[idx_col]=0; v_45[idx_45]=0; v_135[idx_135]=0; } } }};
0 0
- [leetcode 51] N-Queens
- LeetCode(51) N-Queens
- leetcode-51-N-Queens
- leetcode 51: N-Queens
- LeetCode 51: N-Queens
- LeetCode 51 - N-Queens
- Leetcode 51 N-Queens
- LeetCode 51 N-Queens
- leetcode(51):N-Queens
- LeetCode 51 N-Queens
- Leetcode 51 N-Queens
- LeetCode 51 N-Queens II
- [leetcode-51]N-Queens(java)
- LeetCode(51) N-Queens
- LeetCode 51 - N-Queens II
- LeetCode-51&52.N-Queens
- DAY22:leetcode #51 N-Queens
- LeetCode No.51 N-Queens
- const与指针之间搭配使用的规则
- 在IT这条不归路上走得越来越远
- 2011 多项式求和
- 一些DP经典问题:HDU(hdoj) 2126,1176,2546,1159
- 如何准备机器学习工程师的面试 ?
- leetcode 51: N-Queens
- STM32 boot跳转到APP的Jump_Address()分析
- NOIP 2011TG 解题报告
- 关于SQLServer数据库的问题
- Leetcode Q5:Longest Palindromic Substring
- log4cpp学习笔记
- hdoj 1022 火车进出站问题
- js获取随机数
- hadoop mapreduce的job的几种运行模式