先贴代码,现在没时间。有时间的时候慢慢写
#include "math.h"
int sum=0;
int place(int x[],int i);
void queen(int x[],int n,int t) ;
void queen2(int x[],int n);
void main()
{
int x[8],t ;
sum=0;
queen(x,8,0);
printf("%d/n",sum);
sum=0;
queen2(x,8);
printf("2:%d/n",sum);
}
void queen2(int x[],int n) //非递归回溯
{
int t=0,i;
x[t]=-1;
while(t>-1)
{
x[t]+=1;
while(x[t]<=n-1 && place(x,t)==0) x[t]+=1;
if(x[t]<n)
{
if(t==n-1)
{
sum++;
t--;
}
else
{
t++;
x[t]=-1;
}
}
else
t--;
}
}
void queen(int x[],int n,int t) //递归回溯
{
int i,j;
if(t>=n)
{
sum++;
return ;
}
for(i=0;i<n;i++)
{
x[t]=i;
if(place(x,t))
{
queen(x,n,t+1);
}
}
}
int place(int x[],int i )
{
int j;
for(j=0;j<i;j++)
{
if(fabs(i-j)==fabs(x[i]-x[j])||x[j]==x[i]) return 0;
}
return 1;
}