C++课程设计八皇后数学问题求解程序(东南大学).docVIP

C++课程设计八皇后数学问题求解程序(东南大学).doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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]

文档评论(0)

haihang2017 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档