1 #include <iostream>
2 #include <cmath>
3 #include <cstdlib>
4 #include <cstdio>
5 using namespace std;
6 #define N 8
7
8 //Check whether s[k] = pos is ok
9 bool is_ok(int s[], int k, int pos)
10 {
11 for(int i=0; i<k; i++){
12 if(pos == s[i] ) return false;
13 if(abs(s[i]-pos) == abs(k-i) )return false;
14 }
15 return true;
16 }
17
18
19 void output(int pos[])
20 {
21 for(int i=0;i<N;i++)
22 cout<<pos[i]<<",";
23 cout<<endl;
24 }
25 void put(int i, int pos[])
26 {
27 if(i==N){
28 output(pos);
29 return ;
30 }
31 for(int j=0;j<N;j++)
32 if(is_ok(pos, i, j)){
33 pos[i]=j;
34 put(i+1, pos);
35 }
36
37 }
38
39 void put2()
40 {
41 int s[N]={-1};
42 int i=0;s[0]=0;
43 i++;
44 while(i>=0)
45 {
46 int j;
47 if(i==N){
48 output(s); i--;
49 }
50 for(j= max(0, s[i]+1); j<N ;j++)
51 if( is_ok(s, i, j)) {
52 s[i] = j;i++; break;
53 }
54 if(j==N){
55 s[i]=-1;i--;
56 }
57 }
58 }
59 int main()
60 {
61 int pos[N]={0};
62 put(0,pos);
63 put2();
64 return 0;
65 }