- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 假设法解决学实际问题.doc
- 信息论编码程设计.doc
- 偏微分方程值解(双曲方程书稿).doc
- 偏微分方程解方法及其比较.doc
- 做简历表格骤.doc
- 做纸阄的男子.doc
- 偶然的发现例文.doc
- 做表头.doc
- 偶然发现的载有妖气原图地方法.doc
- 倾斜的伞教.doc
- 2024年陕西咸阳亨通电力(集团)有限公司供电服务业务部直聘用工招聘145人笔试参考题库附带答案详解 .docx
- 2024年中建四局土木工程有限公司校园招聘笔试参考题库附带答案详解 .docx
- 2024年四川雅茶贸易有限公司公开招聘和考察聘用人员3人笔试参考题库附带答案详解 .docx
- 2024年中国烟草总公司辽宁省公司公开招聘拟录用人员(166人)笔试参考题库附带答案详解 .docx
- 2024江苏连云港中诚物业管理有限公司招聘工作人员1人笔试参考题库附带答案详解 .docx
- [毕节]2025年贵州毕节市引进人才649人笔试历年参考题库附带答案详解.docx
- 2024年度中国东航技术应用研发中心有限公司校园招聘笔试参考题库附带答案详解 .docx
- 2024年福建省厦门盐业有限责任公司春季人才招聘1人笔试参考题库附带答案详解 .docx
- 2024年山东省环保发展集团绿能有限公司职业经理人招聘2人笔试参考题库附带答案详解 .docx
- 2024年安徽滁州郊源阳光电力维修工程有限责任公司招聘41人(第一批次)笔试参考题库附带答案详解 .docx
最近下载
- 新版现代西班牙语第二册课后答案.docx
- 新概念英语第一册lesson23-24.ppt VIP
- 第二单元《微生物的妙用》第二课时(说课稿)-2023-2024学年五年级下册综合实践活动粤教版.docx
- 小学操场塑胶跑道及人造草坪施工方案设计.doc
- 水平五(高中)体育《弯道跑技术》教学设计及教案.doc
- 必达智能V3MT感应密码锁用户手册.pdf
- 第二单元《微生物的妙用》第一课时(说课稿)-2023-2024学年五年级下册综合实践活动粤教版.docx
- 酒店品牌建设与管理 全套课件.pptx
- 仁爱版八年级下册英语全册课件.pdf
- 人教版四年级数学下册第二单元观察物体(二)大单元教学设计 .pdf
文档评论(0)