3个回答
展开全部
#include<stdio.h>
#include<stdlib.h>
int A[9],t=0,temp[9],z;
int a[92][9],s[92][9],tt[8][8];
bool check(int m);
void save(void);
int k=0;
void queen(int r){
int i;
for(i=1;i<=8;i++)
{
A[8-r+1]=i;
if(check(8-r+1))
{
if(r>1)
queen(r-1);
else
{
save();
t++;
}
}
}
}
bool check(int m)
{
int i;
for(i=1;i<m;i++)
{
if(A[m]==A[i])
return false;
if(A[m]-m==A[i]-i)
return false;
if(A[m]+m==A[i]+i)
return false;
}
return true;
}
void save(void){
for(int i=1;i<=8;i++)
a[t][i]=A[i];
}
bool check2(int temp[],int z)
{
k=0;
bool f[92];
for(int i=0;i<=z;i++)
{
f[i]=false;
for(int m=0;m<8;m++)
{
if((s[i][m]!=9-temp[m])&&
(s[i][m]!=temp[9-m])&&
(m!=temp[s[i][m]])&&
((9-m)!=temp[9-s[i][m]])&&
(m!=temp[9-s[i][m]])&&
(s[i][m]!=9-temp[9-m])&&
((9-m)!=temp[s[i][m]]))
{
f[i]=true;
break;
}
}
}
for(int i=0;i<=z;i++)
if(f[i]==false)
return false;
return true;
}
void main()
{
queen(8);
printf("第一次筛选的有%d种\n",t);
int z=0,i,j;
for(i=0;i<92;i++){
if(check2(a[i],z))
{
for(j=1;j<=8;j++)
s[z][j]=a[i][j];
z++;
}
}
for(i=0;i<z;i++)
{
for(int m=0;m<8;m++){
for(int n=0;n<8;n++){
tt[m][n]=0;
}
}
for(j=1;j<=8;j++)
{
printf("%2d",s[i][j]);
tt[s[i][j]-1][j-1]=1;
}
printf("\n");
printf("----------------\n");
for(int m=0;m<8;m++){
for(int n=0;n<8;n++){
if(tt[m][n]==1)
printf(" *");
else
printf(" ");
}
printf("\n");
}
}
printf("本质不同的有%d种\n",z);
system("pause");
}
#include<stdlib.h>
int A[9],t=0,temp[9],z;
int a[92][9],s[92][9],tt[8][8];
bool check(int m);
void save(void);
int k=0;
void queen(int r){
int i;
for(i=1;i<=8;i++)
{
A[8-r+1]=i;
if(check(8-r+1))
{
if(r>1)
queen(r-1);
else
{
save();
t++;
}
}
}
}
bool check(int m)
{
int i;
for(i=1;i<m;i++)
{
if(A[m]==A[i])
return false;
if(A[m]-m==A[i]-i)
return false;
if(A[m]+m==A[i]+i)
return false;
}
return true;
}
void save(void){
for(int i=1;i<=8;i++)
a[t][i]=A[i];
}
bool check2(int temp[],int z)
{
k=0;
bool f[92];
for(int i=0;i<=z;i++)
{
f[i]=false;
for(int m=0;m<8;m++)
{
if((s[i][m]!=9-temp[m])&&
(s[i][m]!=temp[9-m])&&
(m!=temp[s[i][m]])&&
((9-m)!=temp[9-s[i][m]])&&
(m!=temp[9-s[i][m]])&&
(s[i][m]!=9-temp[9-m])&&
((9-m)!=temp[s[i][m]]))
{
f[i]=true;
break;
}
}
}
for(int i=0;i<=z;i++)
if(f[i]==false)
return false;
return true;
}
void main()
{
queen(8);
printf("第一次筛选的有%d种\n",t);
int z=0,i,j;
for(i=0;i<92;i++){
if(check2(a[i],z))
{
for(j=1;j<=8;j++)
s[z][j]=a[i][j];
z++;
}
}
for(i=0;i<z;i++)
{
for(int m=0;m<8;m++){
for(int n=0;n<8;n++){
tt[m][n]=0;
}
}
for(j=1;j<=8;j++)
{
printf("%2d",s[i][j]);
tt[s[i][j]-1][j-1]=1;
}
printf("\n");
printf("----------------\n");
for(int m=0;m<8;m++){
for(int n=0;n<8;n++){
if(tt[m][n]==1)
printf(" *");
else
printf(" ");
}
printf("\n");
}
}
printf("本质不同的有%d种\n",z);
system("pause");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这里有代码
参考资料: http://hi.baidu.com/luosiyong/item/97677e0ea3663438f3eafca9
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
百度hi我..
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询