//题目:
在一个8×8的国际象棋盘上,有八个皇后,每个皇后占一格;
要求皇后间不会出现相互“攻击”的现象,即不能有两个皇后
处在同一行、同一列或同一对角线上,问共有多少种不同的方法。
#include "stdio.h"
#include "stdlib.h"
int queen[8],sum=0;
void show()
{
int a[8][8]={0};
int i,j;
printf("NO.%d\n",sum+1);
for (i=0; i<8; i++)
{
a[i][queen[i]]=1;
for (j=0; j<8; j++)
{
printf("%d",a[i][j]);
}
printf("\n");
}
printf("\n");
sum++;
}
int check(int n)
{
int i;
for (i=0; i<n; i++)
{
if (queen[i] == queen[n] || abs(queen[i] - queen[n]) == (n-i)) //是否同列,同对角线
{
return 0;
}
}
return 1;
}
void put(int n)
{
int i;
for (i=0; i<8; i++)
{
queen[n]=i; //判断第n行第几列为1
if (check(n))
{
if (n==7)
{
show(); //打印
}
else
{
put(n+1); //下一行
}
}
}
}
int main(void)
{
put(0);
printf("%d",sum);
getch();
return 0;
}