8皇后

#include<stdio.h>
#include<math.h>
int x[100],j;
int w;
int a(int b,int c)
{
int n;
n=b-c;
if(n==0)
return 0;
if(n>0)
return n;
else
return -n;
}
bool place(int k)
{
int i;
for(i=1;i<k;i++)
if(x[k]==x[i]||a(k,i)==a(x[k],x[i]))
return false;
return true;//判断真假,FALSE=0,TRUE=1
}

void queen(int n)//返回值为空

{
int i,k;
for(i=1;i<=n;i++)
x[i]=0;
k=1;
while(k>=1)
{
x[k]=x[k]+1;
while(x[k]<=n&&!place(k))
x[k]=x[k]+1;
if(x[k]<=n&&k==n)
{
for(i=1;i<=n;i++)
{
printf("第%d列%d ",i,x[i]);

}
printf("\n");
w=w+1;
}
else if(x[k]<=n&&k<n)
{
k=k+1;

}

else
{
x[k]=0;
k=k-1;
}
}
}

int main()
{
int n;
printf("皇后个数n:\n");
scanf("%d",&n);
queen(n);
printf("总数%d",w);
}

#include<stdio.h>
#include<math.h>
int x[100],j;
int w;
int a(int b,int c)
{
int n;
n=b-c;
if(n==0)
return 0;
if(n>0)
return n;
else
return -n;
}
bool place(int k)
{
int i;
for(i=1;i<k;i++)
if(x[k]==x[i]||a(k,i)==a(x[k],x[i]))
return false;
return true;
}

void queen(int n)

{
int i,k;
for(i=1;i<=n;i++)
x[i]=0;
k=1;
while(k>=1)
{
x[k]=x[k]+1;
while(x[k]<=n&&!place(k))
x[k]=x[k]+1;
if(x[k]<=n&&k==n)
{
for(i=1;i<=n;i++)
{
printf("第%d列%d ",i,x[i]);

}
printf("\n");
w=w+1;
}
else if(x[k]<=n&&k<n)
{
k=k+1;

}

else
{
x[k]=0;
k=k-1;
}
}
}

int main()
{
int n;
printf("皇后个数n:\n");
scanf("%d",&n);
queen(n);
printf("总数%d",w);
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

我也不知道改写什么

 

posted @ 2016-08-28 15:04  刘cy  阅读(166)  评论(2编辑  收藏  举报