求教用c语言编写八皇后问题

源代码,发送到邮箱dxmk@163.com... 源代码,发送到邮箱 dxmk@163.com 展开
 我来答
八条aaaa
2012-12-31 · 超过14用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:40.9万
展开全部
#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");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luosiyong
2012-12-31 · TA获得超过3256个赞
知道大有可为答主
回答量:1090
采纳率:0%
帮助的人:1612万
展开全部
这里有代码

参考资料: http://hi.baidu.com/luosiyong/item/97677e0ea3663438f3eafca9

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友3038d88
2012-12-31 · TA获得超过1097个赞
知道小有建树答主
回答量:1670
采纳率:0%
帮助的人:1156万
展开全部
百度hi我..
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式