网站大量收购独家精品文档,联系QQ:2885784924

八皇后问题码.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
八皇后问题码

【注:本代码是在百度知道中一同事的答案中摘录的。】 /*八皇后问题(栈的应用-回溯法) 在8*8的国际象棋盘上,安放8个皇后,要求没有一个皇后能够吃掉其它皇后 即:没有两个或两个以上的皇后占据棋盘上的同一行、同一列或同一条对角线*/ //作者:yangyizhi //日期:2012/1/13 //设计思路: /* 先假定在第一行第一列放一个皇后。从第二行开始,每一行根据上一行皇后的位置,选定一个合适的位置, 把走的每一步都压到一个栈中。 若不能选出合适的位置,则弹栈。(即,退一步)改变上一步皇后的位置,再继续试探 */ #include stdio.h #define Status int #define FALSE 0 #define SUCCESS 1 #define STACK_MAXSIZE 8 typedef struct QUEEN { char x ; //行号 char y ; //列号 } ElemType ; /*数据结构-栈*/ typedef struct STACK { ElemType data[STACK_MAXSIZE] ; int top ; //指向栈顶 } SqStack ; //进栈操作 //参数stackPtr为指向栈的指针 //参数x为压入栈的值 Status Push( SqStack * stackPtr , ElemType x ) { //如果栈满 if(stackPtr-top == STACK_MAXSIZE) { return FALSE ; } //先把游标加1,再向其所指的位置填数据 stackPtr-top++ ; stackPtr-data[stackPtr-top].x = x.x ; stackPtr-data[stackPtr-top].y = x.y ; return SUCCESS ; } //出栈操作 Status Pop( SqStack * stackPtr , ElemType * ret ) { //如果栈空 if(stackPtr-top == -1) { return FALSE ; } ret-x = stackPtr-data[stackPtr-top].x ; ret-y = stackPtr-data[stackPtr-top].y ; stackPtr-top-- ; return SUCCESS ; } /*函数声明*/ Status PrintQipan(char fun_qipan[9][9]) ; Status GetLegalLocate(char fun_qipan[9][9] , int row , ElemType * legalLocatePtr) ; Status PutEightQueen(char fun_qipan[9][9] , SqStack * queenStackPtr) ; /*主函数*/ Status main(void) { //初始化棋盘(0代表可用位置,1代表皇后已占用,2代表该位置经过验证不可用) char qipan[9][9] = {0} ; int count=0 ; //统计有多少可能的解 ElemType popLocate ; //定义栈 SqStack queenStack ; queenStack.top = -1 ; //根据求得的这一个解,不停地退栈 回溯 进而求得其它的解(相当于从某个叶子节点开始遍历整棵树) while(PutEightQueen(qipan , queenStack) != FALSE) { Pop(queenStack , popLocate) ; qipan[popLocate.x][popLocate.y] = 2 ; count++ ; } printf(\n八皇后问题共有%d种解 , count); return SUCCESS ; } //根据当前棋盘情况生成一个最终棋盘 //参数fun_qipan,参数queenStackPtr ,可确定一个棋盘的状态 Status PutEightQueen(char fun_qipan[9][9] , SqStack * queenStackPtr) { int currentRow ; //当前应该处理棋盘的第几行 ElemType popLocate ; ElemType legalLocate ; while( (currentRow=queenStackPtr-top+2) currentRow = 8 currentRo

您可能关注的文档

文档评论(0)

ybcm963 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档