解答如下:
(全排列问题)
class Solution {
public:
static const int maxn=110;
int res=0;
int P[maxn]; //P[maxn]存储的是皇后信息,解法1为{ * ,2,4,1,3}
int hashTable[maxn]={false};
void generateQ(int index,int n,vector<vector<string> > &vv){
if(index==n+1){ //输出过程
string ss(n,'.');
vector<string> vvres;
for(int k=0;k<n;k++){
string ss_k=ss;
ss_k[P[k+1]-1]='Q'; //P[]从第1位开始存储
vvres.push_back(ss_k);
}
vv.push_back(vvres);
res++; //res为解法个数
return;
}
for(int i=1;i<=n;i++){ //全排列过程,第index位遍历所有值,找出之前未出现的
if(hashTable[i]==false){
bool flag=true;
for(int j=1;j<index;j++){
if(abs(index-j)==abs(i-P[j])){ //是对角线,不符合,为冲突
flag=false;
break;
}
}
if(flag){
P[index]=i;
hashTable[i]=true;
generateQ(index+1,n,vv);
hashTable[i]=false;
}
}
}
}
vector<vector<string>> solveNQueens(int n) {
vector<vector<string> > vv;
generateQ(1,n,vv);
return vv;
}
};