棋盘图示的展示n皇后经典问题的求解_第1页
棋盘图示的展示n皇后经典问题的求解_第2页
棋盘图示的展示n皇后经典问题的求解_第3页
棋盘图示的展示n皇后经典问题的求解_第4页
棋盘图示的展示n皇后经典问题的求解_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/主要功能:用棋盘图示的方式展示n皇后经典问题的求解。/由于求解结果较多,直接写入文本文件后打开即可。/课题名称:n皇后经典问题求解软件#include #include #include #include #include const int QUEENMAXCOUNT = 40; /设置皇后的最大个数const int KINDSOFWRITEFILE = 1000; /设置保存文件排列种类最大值int queenarrayQUEENMAXCOUNT; /用于保存皇后排列信息class NQueen /构造一个NQueen类public: NQueen(); /构造函数 NQueen();

2、 /析构函数 void startruning(); /初始化函数 void finish(); /结束化函数protected: void nNQueens(int queesnumnow); /回溯法求解函数 bool place(int queesnumnow,int col); /条件判断函数 bool writefile(); /写文件函数 int kindscount; /排列种类计数器 int actualcount; /当前情况下皇后个数 clock_t starttimer, finishtimer; /开始时间结束时间;void NQueen:startruning() k

3、indscount = 0; /计数器初始化 cout请输入皇后个数(注意不大于QUEENMAXCOUNTactualcount; if(actualcount QUEENMAXCOUNT) coutendl【温馨提示】皇后个数大于QUEENMAXCOUNT,不符合要求!endl; cout= 10) /当皇后个数大于10时,运算量很大 coutendl【温馨提示】皇后个数较多,运算中,请等待.endlendl; else if(actualcount 4) coutendl【提示】actualcount皇后问题没有解!endl; cout=endl; return; /此时无解 startt

4、imer = clock(); /程序开始时间 nNQueens(0); finishtimer = clock(); /程序结束时间 finish();void NQueen:finish() double duration = (double)(finishtimer-starttimer)/CLOCKS_PER_SEC; if(actualcount11) coutendl皇后排列方式一共有kindscount种。endlendl; else coutendl皇后排列的种类太多,不便给出总数,只取其中的 KINDSOFWRITEFILE种写入文件。endlendl; coutendl【时

5、间提示】您本次操作所用时间为:; if(duration 10) coutduration 秒。endlendl; else cout(int)(duration)/60 分 (int)(duration)%60 秒。endlendl; cout运算完毕!系统将自动打开文件,请查看.endl; ShellExecute(NULL,open,n-皇后问题.txt,NULL,NULL,SW_SHOWNORMAL); cout=endl;bool NQueen:place(int queesnumnow,int col)/判断两个皇后是否在同一列或者一条斜线上 for(int row = 0;row

6、 queesnumnow;row+) if(queenarrayrow = col) | (abs(queenarrayrow-col) = abs(row-queesnumnow) return false; return true;void NQueen:nNQueens(int queesnumnow) if(kindscount KINDSOFWRITEFILE ) /控制写如文件的个数 for(int col = 0;col actualcount;col+) if(place(queesnumnow,col) queenarrayqueesnumnow = col; if(quee

7、snumnow = actualcount-1) /约束条件 kindscount+; /计数器 writefile(); /写到文件中 else nNQueens(queesnumnow+1); else return;bool NQueen:writefile() if(kindscount = 1) /当count=1时,将.txt文件清空。 ofstream out(n-皇后问题.txt); if(out) outttt actualcount皇后问题求解如下 endl; out.close(); ofstream out(n-皇后问题.txt,ios:app); if(!out) r

8、eturn false; else int colcount,rowcount,col; outendltt第【kindscount】种方式:(; for(col = 0;col actualcount-1;col+) outqueenarraycol+1,; outqueenarrayactualcount-1+1)endl; for(colcount = 0;colcount actualcount;colcount+) if(colcount=0) outtt; for(col = 1;col actualcount;col+) out; outendl; else outtt; for

9、(col = 1;col actualcount;col+) out; outendl; outtt; for(rowcount = 0;rowcount actualcount;rowcount+) if(rowcount = queenarraycolcount) out; else out ; outendl; outtt; for(col = 1;col actualcount;col+) out; outendl; out.close(); /关闭文件 return true;/class interfacebase public: NQueen NQueenonface; /定义一

10、个对象NQueenonface void clearscreen(void); void showmenu(void); void processmenu(void);void interfacebase:clearscreen(void) system(cls);void interfacebase:showmenu(void) cout=endl; cout n皇后经典问题求解软件 endl; cout=endl; cout软件功能说明: endl; cout 用n*n棋盘图示的方式展示八皇后经典问endl; cout题的求解。由于求解结果较多,直接写入文endl; cout本文件即可。

11、endl; cout=endl; cout 功能菜单 endl; cout=endl; cout 1.求解n皇后问题 endl; cout 2.退出软件 endl; cout=endl; coutmenuchoice; switch(menuchoice) /根据用户的选择进行相应的操作 case 1: NQueenonface.startruning(); /调用类成员函数 break; case 2: coutendlendl您已经成功退出本系统,欢迎再次使用!endl; system(pause); exit(0); default: cout对不起,您输入的功能编号有错!请重新输入!endl; break; void main(void) /程序主入口 system(col

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论