皇后问题
程序代码:#include<stdio.h>
#define MAX 6
int a[MAX];
int fire(int a[],int i) //判断和前买你的皇后有没有冲突
{
int n;
for(n=0;n<i;n++)
if(a[n]==a[i]||abs(a[n]-a[i])/abs(n-i)==1)
return 1;
return 0;
}
int main()
{
int i;
int a[MAX];
for(i=0;i<MAX;i++)//初始化在第一格
a[i]=1;
for(i=0;i<MAX;)//判断各行的皇后位置
{
if(fire(a,i))
{
a[i]++;// 有冲突的时候,下一个格
while(a[i]>MAX)// 当这个值大于MAX的时候说明已经超出了棋盘的宽,循环向上选着。
{
a[i]=1;
a[--i]++;// i--; a[i]++;
}
}
else
i++;// 如果这个点的皇后与前面的不冲突,继续选着下一个位置。
}
for(i=0;i<MAX;i++,printf("\n"))//输出皇后相对位置
{
for(int n=1;n<a[i];n++)
printf(" 0 ");
printf(" 1 ");
for(int n=a[i]+1;n<=MAX;n++)
printf(" 0 ");
}
return 0;
}各位大虾千万不要用递归呀,我到现在还不知道递归是怎么算出来的。这个能算出 MAX =4,5的但算不出6,7,8的了···不知道什么原因。thanks!








