思路:和八皇后问题一样,就是多了个排序(其实也没有),因为八皇后问题的输出顺序就是按数字大小来的,所以多一个存值数组就可以了。
代码:
#include<iostream>
#include<cmath>
using namespace std;
int n=8,count=1;
int queenPos[100];
int queens[99][9];
void NQueen(int k);
int main()
{
NQueen(0);
int x,y;
cin>>x;
while(x--){
cin>>y;
for(int i=0;i<n;i++) cout<<queens[y][i];
cout<<endl;
}
return 0;
}
void NQueen(int k){
int i;
if(k==n){
for(i=0;i<n;i++)
queens[count][i]=queenPos[i]+1;
count++;
return ;
}
for(i=0;i<n;i++){
int j;
for(j=0;j<k;j++)
if(queenPos[j]==i||abs(queenPos[j]-i)==abs(k-j))
break;
if(j==k){
queenPos[k]=i;
NQueen(k+1);
}
}
}