用C语言里的栈结构实现八皇后问题

急需一个用栈结构实现八皇后问题的程序,C语言的,希望会的人多多帮助!!谢谢!!... 急需一个用栈结构实现八皇后问题的程序,C 语言的 ,希望会的人多多帮助!!谢谢!! 展开
 我来答
欣欣虫子
2006-10-20 · TA获得超过210个赞
知道小有建树答主
回答量:574
采纳率:0%
帮助的人:345万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int Judge(int *p, int j)
//判断当前棋子位置是否符合规则,是则返回1,否则返回0;
{
int i;
for(i=0;i<j;i++)
{
if(p[j]==p[i]) return 0;
if(abs(p[j]-p[i])==j-i) return 0;
}
return 1;
}

int main()
{
int a[8]; //a[i]表示第i行的后所在位置(a[3]=0表示第3行的后在第0列)
int i=0,j=0,k=0;

for(a[0]=0;a[0]<8;j=0,a[j]++)
for(a[++j]=0;a[j]<8;j=1,a[j]++)
if(Judge(a,j))
for(a[++j]=0;a[j]<8;j=2,a[j]++)
if(Judge(a,j))
for(a[++j]=0;a[j]<8;j=3,a[j]++)
if(Judge(a,j))
for(a[++j]=0;a[j]<8;j=4,a[j]++)
if(Judge(a,j))
for(a[++j]=0;a[j]<8;j=5,a[j]++)
if(Judge(a,j))
for(a[++j]=0;a[j]<8;j=6,a[j]++)
if(Judge(a,j))
for(a[++j]=0;a[j]<8;a[j]++)
if(Judge(a,j))
{ for(i=0;i<8;i++) printf("%d",a[i]);
printf("%3s"," ");
if(!(++k%7)) printf("\n");
}
printf("\n\n%d\n\n",k);
printf("\n请按任意键结束...");
getch();
return 0;
}
百度网友45e16de6f
2006-10-20 · TA获得超过120个赞
知道小有建树答主
回答量:130
采纳率:100%
帮助的人:59.4万
展开全部
你看这个行不行.我从网上搜的.

/*八皇后问题可以有多种解法,我通过找寻棋盘上各个棋子之间的斜率来解决,想与大家共同探讨 -----SET*/

/*在TC上,调试通过*/

#include<math.h>
int check(int c[])

/*判断棋盘上八位数列是否符合斜率不为+1、-1、或0,且每位数字从1到8各出现一次,若符合返回1,否则为0*/
{int n,m;
for (n=0;n<7;n++)
for (m=n+1;m<8;m++)
if (c[m]<1||c[m]>8||c[n]==c[m]||abs(c[n]-c[m])==abs(n-m))
return(0);
return(1);
}
main()
{int qp[8]=,*p; /*qp[8]代表棋盘上八行,八个皇后在棋盘上一定是每行一个*/

/*八个皇后在棋盘上的横坐标一定各不相同,即1--->8各出现一次*/

/*由于数12345678可被九整除,于是用穷举法找出所有能被九整除的八位数,*/

/*其中必包含1--->8在八位中所有的排列组合*/

/*检测这些数列就能找出八皇后的所有可能*/

for (p=qp;qp[7]<9;qp[0]+=9)
{for (p=qp;p<&qp[7];) /*对12345678每次加9,直加到87654321*/
{if (*p>9)
{*(p+1)+=1;
*p-=10;
p++;
}
else
p+=8;
}
if (check(qp)) /*检测八位数列,返回值为真则在屏幕上输出*/
{for (p=qp;p<=&qp[7];p++) printf ("%d",*p);
printf (" ");
} } }

参考资料: http://chinavery.100steps.net/c/193.html

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式