code1:
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
using namespace std;
int board[8][8];
int result[92][8];
int order[8];
int cur=0;
void solve(int pos,int state[8][8],int que[8]){
if(pos==8){ //如何记录结果
for(int a=0;a<8;a++) result[cur][a]=order[a]+1;
cur++;
return;
}
int s[8][8];
for(int a=0;a<8;a++){
if(!state[pos][a]){
for(int b=0;b<8;b++){
for(int c=0;c<8;c++){
s[b][c]=state[b][c];
}
}
que[pos]=a;
for(int b=0;b<8;b++){
s[b][a]=1;
}
for(int c=pos,d=a;c<8&&d>=0;c++,d--){
s[c][d]=1;
}
for(int c=pos,d=a;c<8&&d<8;c++,d++){
s[c][d]=1;
}
solve(pos+1,s,que);
}
}
}
int main(){
memset(board,0,sizeof(board));
solve(0,board,order);
int n;
while(cin>>n,n){
for(int a=0;a<8;a++){
cout<<result[n-1][a];
}
cout<<endl;
}
return 0;
}
code2:
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
using namespace std;
int board[8][8];
int result[92][8];
int mark[8];
int cur=0;
void putQueen(int pos){
if(pos==8){ //如何记录结果
for(int a=0;a<8;a++){
result[cur][a]=mark[a]+1;
}
cur++;
return;
}
for(int a=0;a<8;a++){
if(board[pos][a]==-1){
mark[pos]=a;
for(int b=0;b<8;b++){
for(int c=0;c<8;c++){
if(board[b][c]==-1){
if(b==pos||c==a||(abs(b-pos)==abs(c-a))) board[b][c]=pos;
}
}
}
putQueen(pos+1);
//回溯
for(int b=0;b<8;b++){
for(int c=0;c<8;c++){
if(board[b][c]==pos) board[b][c]=-1;
}
}
}
}
}
int main(){
memset(board,-1,sizeof(board));
putQueen(0);
int n;
while(cin>>n,n){
for(int a=0;a<8;a++){
cout<<result[n-1][a];
}
cout<<endl;
}
return 0;
}
code3:
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
using namespace std;
int result[92][8];
int mark[8];
int cur=0;
void putQueen(int pos){
if(pos==8){ //如何记录结果
for(int a=0;a<8;a++){
result[cur][a]=mark[a]+1;
}
cur++;
return;
}
int k;
for(int a=0;a<8;a++){
for(k=0;k<pos;k++){
if(mark[k]==a||(abs(pos-k)==abs(a-mark[k]))) break;
}
if(k==pos){
mark[pos]=a;
putQueen(pos+1);
}
}
}
int main(){
putQueen(0);
int n;
while(cin>>n,n){
for(int a=0;a<8;a++){
cout<<result[n-1][a];
}
cout<<endl;
}
return 0;
}