八皇后问题

#include <stdio.h>
#include <stdlib.h>
#define Maxsize 100
typedef struct node{
     int _x;
     int _y;
}chessman,*chess;
static int cnt=0;
static chessman c[Maxsize];
bool isOK(chess c,chessman cm,int c_len){  //判断是否能将当前皇后加入棋盘中
     for(int i=0;i<c_len;i++){
          if(c[i]._x==cm._x) return false;
          else if(c[i]._y==cm._y) return false;
          else if(abs(c[i]._x-cm._x)==abs(c[i]._y-cm._y)) return false;
     }
     return true;
}
void eight_queen(int k,int n,chess c){  //放置第k行的皇后
     if(k>=n){  //k等于n则说明为满足条件的布局,则输出
          cnt++;
          for(int m=0;m<n;m++){
               printf("(%d,%d) ",c[m]._x,c[m]._y);
          }
          printf("\n");
     }else{
          for(int i=0;i<n;i++){  //循环枚举所有x的可能取值
               chessman cm;
               cm._x=i;
               cm._y=k;
               if(isOK(c,cm,k)){
                    c[k]=cm;
                    eight_queen(k+1,n,c);
               }
          }
     }
}
int main(){
     eight_queen(0,8,c);
     printf("----------\n");
     printf("COUNT = %d\n",cnt);
     return 0;
}

  

posted on 2017-07-01 22:14  woaiwwc  阅读(95)  评论(0)    收藏  举报