N-Queen
Q:八皇后问题。DFS
vector<vector<string> > solveNQueens(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<vector<string> > result;
if(n<=0)
return result;
vector<int> positions;
Queens(0,n,positions,result);
return result;
}
void Queens(int nrow,int n,vector<int>& positions,vector<vector<string> >& result)
{
if(nrow==n)
{
printSolution(positions,result);
return;
}
for(int i=0;i<n;i++)
{
if(checkvalid(i,positions))
{
positions.push_back(i);
Queens(nrow+1,n,positions,result);
positions.pop_back();
}
}
}
bool checkvalid(int ncol,vector<int>& positions)
{
int rows = positions.size();
for(int i=0;i<rows;i++)
{
if(positions[i]==ncol||rows-i==ncol-positions[i]||rows+ncol==i+positions[i]) //not in the same colomn
return false;
}
return true;
}
void printSolution(vector<int>& positions,vector<vector<string> >& result)
{
vector<string> solution;
int n = positions.size();
for(int i=0;i<n;i++)
{
string str = "";
for(int j=0;j<positions[i];j++)
str+=".";
str+="Q";
for(int j=positions[i]+1;j<n;j++)
str+=".";
solution.push_back(str);
}
result.push_back(solution);
}
浙公网安备 33010602011771号