#include"stdio.h"
#include"math.h"
#define MAX 8
int board[MAX];
void chess_result()
{
int i;
for(i=0;i<MAX;i++)
{
printf("(%d,%d)",i,board[i]);
}
printf("\n");
}
int chess_aross(int n)
{
int i;
for(i=0;i<n;i++)
{
if(board[i]==board[n] || abs(n-i)==abs(board[n]-board[i]))
return 1;//board[i]和board[n]相等时候就表明在同一行 因为是层层调用所有的不可能是同一列
} //因为每调用一次就会深入一层。
return 0;//因为abs(n-i)和abs(board[n]-board[i])相等就表明他们在一条斜线上
}
void put_chess(int n)
{
int i;
for(i=0;i<MAX;i++)
{
board[n]=i;
if(!(chess_aross(n)))
{
if(n==MAX-1)
chess_result();
put_chess(n+1);
}
}
}
void main()
{
printf("==========八皇后的所有合法布局==========\n");
put_chess(0);
}