2007
12-16

#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;
}


留下一个回复