赞
踩
- bool isvalid(int row,int col,int N,vector<int> &record)//判断是否能够放置
- {
- for(int i=0;i<N;i++)
- {
- if(record[i] == col || abs(i-row) == abs(record[i]-col))
- return false;
- }
- return true;
- }
- void print(vector<vector<string>> &result,vector<int> &record,int N)//输出
- {
- ostringstream re;
- vector<string> temp;
- for(int i=0;i<N;i++)
- {
- for(int j=0;j<N;j++)
- {
- if(record[i] == j)
- re<<'Q';
- else
- re<<'.';
- }
- temp.push_back(re.str());
- re.str("");
- }
- result.push_back(temp);
- }

- vector<vector<string>> solveNQueens(int n) {
- vector<vector<string>> result;
- int row=0,col=0;
- vector<int> record(n,-10000);
- while(row<n)
- {
- while(col<n)
- {
- if(isvalid(row,col,n,record))
- {
- record[row] = col;
- col = 0;
- break;
- }
- else
- {
- col++;
- }
- }
- if(record[row] == -10000)//若这一行没有放置
- {
- if(row==0)//退到第一行,程序结束
- break;
- else
- {
- --row; //回退到上一行
- col=record[row] +1;//上一行往右移一列
- record[row] = -10000;//清除上一行的皇后
- continue;
- }
- }
- if(row == n-1)
- {
- print(result,record,n);
- col = record[row]+1;//往右移一列
- record[row] = -10000;//清除本行的皇后
- continue;
- }
- ++row;
- }
- return result;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。