这次没有采用一般的递归算法来实现N皇后,下面是非递归算法~
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define M 100
int l[M];
int check(int x,int l[])
{
int i;
for(i=1;i<x;i++)
if(l[i]==l[x]||(abs(i-x)==abs(l[i]-l[x])))
return 0;
return 1;
}
int main()
{
int i,j,n,k,num;
while(scanf("%d",&n)&&n!=0)
{
num=0;
k=1;
l[k]=0;
while(k>0)
{
l[k]++;
while(l[k]<=n&&!check(k,l))
l[k]++;
if(l[k]<=n)
{
if(k==n)
num++;
else
{
k++;
l[k]=0;
}
}
else
{
l[k]=0;
k--;
}
}
printf("%d/n",num);
}
system("pause");
return 0;
}