#include <stdio.h>
#include <stdlib.h>
#define max 8
int queen[max], sum = 0; //queen数组内放的是皇后的纵坐标
void show() //打印输出
{
int i;
for(i = 0; i < max; i++)
{
printf("(%d,%d)",i,queen[i]);
}
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)) // abs函数用来求绝对值
{
return 1;
}
}
return 0;
}
void put(int n)
{
int i;
for(i = 0; i < max; i++)
{
queen[n] = i; // 把皇后放置到当前循环位置
if(!check(n))
{
if(n == max - 1) // 判断是否结束
{
show();
}
else
{
put(n + 1);
}
}
}
}
int main()
{
put(0); //从横坐标0开始排列
printf("总共有 %d 种八皇后\n",sum);
system("pause");
return 0;
}
转载自姜南(slyar)