毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 课程设计 >> 正文

C++八皇后问题进行求解源码及流程图

更新时间:2011-5-3:  来源:毕业论文

C++八皇后问题进行求解源码及流程图
在8行8列的棋盘上放置8个皇后,使任一个皇后都不能吃掉其他的7个皇后(注:皇后可吃掉与她处于同行或同列或同一对角线上的其他棋子),并将结果以某种方式显示出来。
程序执行的结果:
4.3概要设计:
本程设计思路: (1) 通过“int LineNum[9]; bool a[9], b[15], c[15];”说明具有全局作用域的4个数组。其中的:
LineNum[i]表示第i列的皇后要放的行位置(只用其中的列号1到8);
 a[i]为true(i =1,2,…,8)表示第i行上尚未放皇后;
 b[i]为true(i =0,1,2,…,14)表示第i条斜对角线上尚未放皇后(斜对角线指的是“”状对角线,该对角线上各点的行列号之和i+j为一个常数);
 c[i]为true(i=0,1,2,…,14)表示第i条反斜对角线上尚未放皇后(反斜对角线指的是“\”状对角线,该对角线上各点的行列号之差i-j为一个常数)。
 从而当使用语句“if ( a[j] && b[i+j-2] && c[i-j+7] ) LineNum[i]=j;”时,可用于判断并实现:如果在第j行的第i列上放置皇后安全的话,则将一枚皇后放置到那儿。
 (2)编制一个具有如下原型的递归函数solve,它负责往第i列开始的连续8-i+1列上均放上皇后,若成功则通过引用参数ok返回true(否则返回false)。
  void solve(int i, bool& ok);
摆放皇后之后,若i=8即已放满时则递归出口;否则通过solve(i+1,ok);进行递归调用。
程序流程图(如左图):
4.3   详细设计与编码:
见上传程序。
 
4.4  调试分析:
     正确设置各皇后的势力范围,是本题关键 ,同时要注意回溯时要消除未考虑的皇后的势力影响


4.5   用户使用说明:
     输出8皇后的92种解法

3.6  设计心得:
本体运用了势力范围图和回溯的方法,可以修改消除递归,同时可以增加限定函数优化回溯。
#include <iostream>
using namespace std;

int f(unsigned long x, int n, int& Lxn)
{
 int num[20]={-1};

    for(int j=0;j<20;j++)
 {
  num[20-j-1]=x%10;
  x=x/10;
原文请找腾讯752018766优,文-论'文.网http://www.youerw.com  if(length<n)
 {
  Lxn=0;
  return 0;
 }
 else
 {
  Lxn=num[19-length+n];
  return num[20-n];
 }


}

int main()
{
 unsigned long x;
 int n;
 int Lxn,Rxn;
 cout <<"请输入 x 和 n 的值:";
 cin >>x>>n;
 Rxn=f(x,n,Lxn);
 cout <<"执行语句Rxn=f(x,n,Lxn);之后,Rxn="<<Rxn<<",Lxn="<<Lxn<<endl;

 return 0;1812

C++八皇后问题进行求解源码及流程图下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。