#include<iostream>
using namespace std;
int count=0;
int chess[8][8]={0};
int danger(int row,int col){
int i,j;for(i=0;i<8;i++){//判断列,只要出现1则不满足 if(chess[i][col]==1)return0;}for(i=row,j=col;i>=0&&j>=0;i--,j--){//判断左上 if(chess[i][j]==1)return0;}for(i=row,j=col;i>=0&&j<8;i--,j++){//判断右上 if(chess[i][j]==1)return0;}return1;}
int Print(){
int row,col;printf("第%d种\n",count+1);for(row=0;row<8;row++){for(col=0;col<8;col++){if(chess[row][col]==1)
cout<<"1";else cout<<"0";}
cout<<'\n';}
cout<<'\n';return0;}
int queen(int row){//核心,
int col;if(row>7){//棋子已经放到第八排,是符合情况的一种 Print();
count++;return0;}for(col=0;col<8;col++){//回溯算法 if(danger(row,col)){//判断是否符合条件
chess[row][col]=1;//赋值 1代表已经放了棋子 queen(row+1);//递归
chess[row][col]=0;//清零, }}return0;}
int main()//主函数 {queen(0);printf("共有%d种解法",count);return0;}