欢迎来到天天文库
浏览记录
ID:18004743
大小:1.16 MB
页数:99页
时间:2018-09-12
《图书馆管理系统(含代码)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、数据结构设计报告学院计算机科学与控制工程学院专业软件外包学生姓名李子豪学号201258504119officiallyestablishedonJuly1,2013,Yibincity,formerlyknownasthebus,integratedoriginalrongzhoubuscompanyinYibincityandMetrobuscompany,formedonlyinYibincityofaState-ownedpublictransportenterprises,thecompanyconsistsofoneortwo,
2、thirdDivision.Integrationofpublictransportservicesisnotyetestablished八皇后问题一.问题描述在8×8格的国际象棋棋盘上放置八个皇后,使得任意两个皇后不能互相攻击,即任何行、列或对角线(与水平轴夹角为45°或135°的斜线)上不得有两个或两个以上的皇后。这样的一个格局称为问题的一个解。请写出求出八皇后问题的算法。二.解题思路描述一个正确的解应当是每一列,每一行,每一条斜线上均只有一个皇后。对于递归算法,本人才有模拟的方式进行,而且,我觉得开辟一个二维数组更显而易见。首先,从
3、空棋盘开始摆放,保证第n行n个皇后互不攻击,然后摆放第n+1个皇后。当然对于第n+1个皇后可能有多种摆放方法,由此,我必须一一枚举,采用回溯策略是可行且合乎逻辑的。 在此过程中,我采用一维数组,一位对于八皇后问题,每一行不可能存在二个及二个以上的皇后,board[i]表示第i行棋盘摆放的位置为第board[i]列。递归方法借助于系统提供的栈。递归解法 #include#include#includeusingnamespacestd;constintMAX_SIZE=100;e
4、numflag{blank='X',queen=1};charChess[MAX_SIZE][MAX_SIZE];//棋盘图intn;//解决n皇后问题inttotal;//用于计摆放方式voidInit()officiallyestablishedonJuly1,2013,Yibincity,formerlyknownasthebus,integratedoriginalrongzhoubuscompanyinYibincityandMetrobuscompany,formedonlyinYibincityofaState-ownedp
5、ublictransportenterprises,thecompanyconsistsofoneortwo,thirdDivision.Integrationofpublictransportservicesisnotyetestablished{//对棋牌进行初始化 for(inti=0;i6、是否可放置 inti,j; for(i=r+1;i7、 returnfalse;//45度斜线上已有一皇后 for(i=r+1,j=c-1;(i=0);i++,j--) if(Chess[i][j]==queen) returnfalse;//135度斜线上已有一皇后 returntrue;//排除四种情况后,说明(r,c)点可放置皇后}voidBacktrack(intk,intcnt){//回溯算法主程序 if(k<08、9、cnt==n)//棋牌摆放完毕or以摆满n后 { if(cnt==10、n) { printf("No.%d:",++total); for(inti=0;i
6、是否可放置 inti,j; for(i=r+1;i7、 returnfalse;//45度斜线上已有一皇后 for(i=r+1,j=c-1;(i=0);i++,j--) if(Chess[i][j]==queen) returnfalse;//135度斜线上已有一皇后 returntrue;//排除四种情况后,说明(r,c)点可放置皇后}voidBacktrack(intk,intcnt){//回溯算法主程序 if(k<08、9、cnt==n)//棋牌摆放完毕or以摆满n后 { if(cnt==10、n) { printf("No.%d:",++total); for(inti=0;i
7、 returnfalse;//45度斜线上已有一皇后 for(i=r+1,j=c-1;(i=0);i++,j--) if(Chess[i][j]==queen) returnfalse;//135度斜线上已有一皇后 returntrue;//排除四种情况后,说明(r,c)点可放置皇后}voidBacktrack(intk,intcnt){//回溯算法主程序 if(k<0
8、
9、cnt==n)//棋牌摆放完毕or以摆满n后 { if(cnt==
10、n) { printf("No.%d:",++total); for(inti=0;i
此文档下载收益归作者所有