#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 8
typedef struct queen
{
int a[N];
int b[N];
int i;
}qn;
int trial(int,int,qn *);
int check(qn *p);
int clear();
int a1[N][N],jin=0;
int main()
{
int i,j;
qn l,*p;
p=&l;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
a1[i][j]=0;
printf(“out put the result\n”);
for(i=0;i<N;i++)
{
p->a[0]=0;
p->b[0]=i;
p->i=1;
trial(1,N,p);
}
printf(“总共有%d种\n”,jin);
return 0;
}
int trial(int i,int n,qn *p)
{
int j,k,l=0,m;
if(i==n)
{
clear();
for(i=0;i<p->i;i++)
{ j=p->a[i];
k=p->b[i];
a1[j][k]=1;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf(“%2d”,a1[i][j]);
printf(“\n”);
}
// printf(“\n”);
getchar();
jin++;
printf(“count–%d\n”,jin);
p->i–;
return 1;
}
else
for(j=0;j<n;j++)
{
k=p->i;
p->a[k]=i;
p->b[k]=j;
p->i++;
l=check(p);
if(l==1)m=trial(i+1,n,p);
if(l==1&&m==1)continue;
p->i–;
}
return 0;
}
check(qn *p)
{
int i,j,k,m;
float t;
for(i=0;i<p->i-1;i++)
for(j=i+1;j<p->i;j++)
{ k=(p->a[i]-p->a[j]);
m=p->b[i]-p->b[j];
if(m==0||k==0)return 0;
t=(1.0*k)/m;
if(t==1)return 0;
if(t==-1)return 0;
}
return 1;
}
int clear()
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
a1[i][j]=0;
return 0;
}
>> 本文固定链接: http://www.vcgood.com/archives/2026
>> 转载请注明: jinfan1009 2007年12月16日 于 C语言帝国 发表