- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C课程设计八皇后数学问题求解程序(东南大学)
C++数学问题求解程序 (东南大学课程设计)
南京理工大学 李凤麟
题目要求
(1)增加函数,完成每输入一组解,暂停屏幕,显示“按任意键继续!”。
(2)完善程序,编写计算八皇后问题共有几组解。
(3)增加输出,显示在第一个皇后确定后,共有几组排列。
(4)将每组解的棋盘横向输出在屏幕上,将五个棋盘并排排列,完成一组解后屏幕暂停,按任意键继续。
(5)求出在什么位置固定一个皇后后,解的数量最多,在什么位置固定皇后后,解的数量最少,求出最多和最少解,5个一组显示。
程序设计
程序利用递归算法来实现,定义棋盘为一个类,使用栈的数据结构。
对于问题(1),了解到C语言中getch()函数,在输出之后使用getch(),从键盘任意读取字符,达到按任意键继续。
对于问题(2),确定第一个皇后之后,由程序自???计算第一个皇后摆放位置的解,摆放规律为:列不变,行由0行增加到7行(本程序中棋盘编号为0到7),再依次计算
对于问题(3)使用源程序中算法已能实现。
对于问题(4)使用一友元实现棋盘的输出,每次储存五个棋盘,然后打印输出,输出用类的函数实现。
对于问题(5)用双重循环作为第一个皇后位置带入计算。
调试结果分析
回溯的过程中直接输出只能做到五个棋盘纵向输出
void Board::Print() //显示一组排列结果
{
cout endl;
for(int i=0; i8; i++)
{
for(int j=0; j8; j++)
cout board[i][j] ;
cout endl;
}
2.考虑先储存棋盘,再输出。
void Board::Save_Board(int i) //调用函数,保存棋盘,保存完一组后五个一行输出
{ for(int j=0;j8;j++)
for(int k=0;k8;k++)
{
PrintBoard[i][j][k]=board[j][k]; //用数组处理,增加一个编号
}
}
3.最初Print1设置成类内函数,输出时直接调用产生问题,考虑友元函数
friend Print1(int , Board);
int Print1(int x,Board myBoard) //类的友元函数,拿出五个棋盘打印
{ int i=0,j,k,n;
if(x=5) //x5时,拿出五个去打印
{ while(x5)
{ n=x-5;
j=5*i;
myBoard.Print5board(5,j);
x=n;
i++;
}
}
k=5*i;
if(x5) myBoard.Print5board(x,k);
//x=5时,直接调用类的成员函数int Board::Print5board(int x , int y)打印
return 1;
}
4.考虑到每一种摆放方法得到的解除以5不一定为整数,所以输出处理成每次解出5种便打印5种,最后不足5种直接打印。
void Board::Print5board( int x , int y ) // 打印出一行的五个棋盘,用两个循环,和一个switch()语句;
{ int i , j , k ;
coutendl;
for(i=0;i8;i++)
{for( k=1;kx+1;k++)
switch(k)
{ case 1: for(j=0;j8;j++) coutPrintBoard[y+1][i][j];
cout\t;
break;
case 2: for(j=0;j8;j++) coutPrintBoard[y+2][i][j];
cout\t;
break;
case 3: for(j=0;j8;j++) coutPrintBoard[y+3][i]
您可能关注的文档
- ArcGIS101导入空间数据.doc
- ArcGISServer93中AJAX支持两种实现方式Callback机制和PartialPostback机制.doc
- ArcGISserver安装注意事项与地图发布地图切片制作.docx
- AQ1108-2014煤矿井下静态破碎技术规范.doc
- AQ3013-2008附表《危险化学品从业单位安全标准化通用规范》.doc
- ArcGISServer管线信息管理论文基于ArcGISServer的综合管线信息发布平台.doc
- ArcGIS实用制图技巧如何制作“粉饰”效果.doc
- ArcGIS实用制图技巧如何制作“羽化”效果.doc
- ArcGIS教程制作地图的浮雕效果.docx
- ArcGIS教程地图制图之创建地图册.docx
文档评论(0)