Solve eight queen (both recursively and non-recursively)
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 }