八皇后问题
是一个以
国际象棋
为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个
皇后
,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的
n皇后摆放问题
:这时棋盘的大小变为
n
×
n
,而皇后个数也变成
n
。
当且仅当
n
= 1或
n
≥ 4时问题有解
。
#include <stdio.h>
#include <math.h>
int a[100];
int count;
int n;
int peace(int t)
{
int i;
int flag=1;
for(i=0;i<t && flag;i++)
{
if(a[i]==a[t] || fabs(t-i)==fabs(a[t]-a[i]))
flag=0;
}
return flag;
}
void backtrack(int t)
{
int i;
if(t==n)
{
count++;
return ;
}
else
{
for(i=0;i<n;i++)
{
a[t]=i;
if(peace(t))
backtrack(t+1);
}
}
}
int main()
{
while(~scanf("%d",&n),n)
{
count=0;
backtrack(0);
printf("%d\n",count);
}
return 0;
}