#include<stdio.h>#include<stdlib.h>int Count =1;intIsLegal(int ChessBoard[][8],int Loop);voidTrial(int i,int ChessBoard[][8]);intmain(void){int ChessBoard[8][8]={{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}};Trial(0, ChessBoard);return0;}intIsLegal(int ChessBoard[][8],int Loop){int Col =0;int Line =0;int m =0;int n =0;for(Col =0; Col <= Loop; Col++){//依次检测每个皇后for(int i =0; i <8; i++){if(ChessBoard[Col][i]==1){
Line = i;break;}}for(int i =0; i <8; i++){if(i != Line){if(ChessBoard[Col][i]==1)return0;}}for(int i =0; i <8; i++){if(i != Col){if(ChessBoard[i][Line]==1)return0;}}
m = Col -1;
n = Line -1;while(m >=0&& n >=0){if(ChessBoard[m--][n--]==1)return0;}
m = Col +1;
n = Line +1;while(m <=7&& n <=7){if(ChessBoard[m++][n++]==1)return0;}
m = Col +1;
n = Line -1;while(m <=7&& n >=0){if(ChessBoard[m++][n--]==1)return0;}
m = Col -1;
n = Line +1;while(m >=0&& n <=7){if(ChessBoard[m--][n++]==1)return0;}//找到当前皇后的攻击位置上有其他皇后则返回0 }return1;//不存在有皇后在其他皇后的攻击范围内,则合理,当前情况可行}voidTrial(int i,int ChessBoard[][8]){if(i >7){//当已经有8个皇后,则可以输出该情况for(int k =0; k <8; k++){for(int j =0; j <8; j++){printf("%d ", ChessBoard[k][j]);}printf("\n");}printf("##########<%d>#############\n",Count++);}else{for(int j =0; j <8; j++){//查看在当前行每个位置放皇后的情况
ChessBoard[i][j]=1;if(IsLegal(ChessBoard,i))//若在当前位置放上皇后,依旧合理Trial(i +1, ChessBoard);//看看在下一行再加一个皇后的情况
ChessBoard[i][j]=0;//将皇后拿走,回到循环起始看下一个位置的情况!}}}