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 }

 

posted on 2013-01-28 15:32  bian  阅读(225)  评论(0编辑  收藏  举报

导航