当前位置:文档之家› c++八皇后问题课程设计

c++八皇后问题课程设计

c++八皇后问题课程设计
c++八皇后问题课程设计

C++课程设计

课程设计题目:八皇后问题

姓名:xxx

专业:xxx

班级:xxxxxx

学号:xxxxxxxx

指导教师:xxx

日期:2014年6月17日

目录

1 课题综述 (2)

1. 1课题的来源及意义------------------------------------------------------------------------------------ 2

1.2 预期目标---------------------------------------------------------------------------------------------- 2

1.3 八皇后问题课题要求------------------------------------------------------------------------------- 3

1.4面对的问题------------------------------------------------------------------------------------------- 4

2 需求分析 (4)

2.1涉及到的知识 ------------------------------------------------------------------------------------------ 4

2.2总体方案 ----------------------------------------------------------------------------------------------- 6

2.3 软件的需求 (7)

2.4 功能需求 (7)

3 模块及算法设计 (7)

3.1算法描述 ----------------------------------------------------------------------------------------------- 7

3.2.详细流程图 ------------------------------------------------------------------------------------------ 9

4.程序代码 (10)

5 程序调试分析 (14)

6 运行与测试 (15)

7总结 (18)

8致谢 (19)

参考文献 (19)

1.课题综述

1. 1课题的来源及意义

八皇后问题是一个古老而著名的问题,该问题是十九世纪著名的数学家高斯1850年提出的。

在国际象棋中,皇后是最有权利的一个棋子;只要别的棋子在它的同一行或同一列或同一斜线(正斜线或反斜线)上时,它就能把对方棋子吃掉。

所以高斯提出了一个问题:在8*8的格的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后都不能处于同一列、同一行、或同一条斜线上面,问共有多少种解法。

到了现代,随着计算机技术的飞速发展,这一古老而有趣的数学游戏问题也自然而然的被搬到了计算机上。运用所学计算机知识来试着解决这个问题是个锻炼和提高我自己编程能力和独立解决问题能力的好机会,可以使我增强信心,为我以后的编程开个好头,故我选择了这个有趣的课题。

1.2 预期目标

运用C++程序设计的编程思想编写代码,实现八皇后问题的所有(92种)摆放情况。要求在DOS界面上显示出每一种方式。

1.3 八皇后问题课题要求

输入后,显示X,Y以及共有多少种布局方案,并显示每一种方案的具体情况

77: (0,2) (1,0) (2,6) (3,4) (4,7) (5,1) (6,3) (7,5)

78: (0,7) (1,1) (2,4) (3,2) (4,0) (5,6) (6,3) (7,5)

输出样式实例

1.4面对的问题

需要用三种方法解决八皇后问题,在这里需要查阅大量资料并多加练习,才能成功编写程序。主要要解决下面的问题:

冲突:包括列、行、两条对角线;

1.列:规定每一列放一个皇后,就不会造成列上的冲突;

2.行:当第i行被某个皇后占据时,该行所有空格就都不能放置其他皇后;

3.对角线:对角线有两个方向,在同一对角线上的所有点都不能有冲突。

2.需求分析

2. 1 涉及到的知识

在本次的课程设计中,用到的知识点主要有:类、函数、选择结构里的条件语句、循环结构里的while语句以及for循环语句、控制语句里的break语句、以及字符串函数的运用等等,并且应用到递归、回溯及穷举等比较经典的算法。

2.1.1类

2.1.1.1 类定义

类就是用户自定义的数据类型。

类定义的一般形式如下:

class 类名

{

细节;(数据成员,成员函数)

};

2.1.1.2 类函数定义

类成员函数类的成员函数通常在类外定义,一般形式如下:

返回类型类名::函数名(形参表)

{

函数体;

}

双冒号: :是域运算符,主要用于类的成员函数的定义。

2.1.2函数

2.1.2.1 函数的定义

定义函数需要指明:函数执行结果返回值的类型、函数名、形式参数(简称形参)和函数体。

一般形式为:

数据类型函数名(行参表)

{

语句序列;

Return 合适类型数值

}

2.1.2.2 数据类型

规定了函数返回值类型。执行函数体中的语句后,通常会产生一个结果,这就是函数的返回值,它可以是任何有效的类型。若函数执行后不返回值,数据类型习惯用void来表示。如果在函数定义时没有数据类型出现,则默认为函数返回值为整型(int)。

2.1.2.3 函数调用

调用一个函数之前必须对该函数进行说明。

函数调用由函数名和函数调用运算符( )组成,( )内有0个或多个逗号分隔的参数(称为实参)。每一个参数是一个表达式,且参数的个数与参数的类型要与被调函数定义的参数(称为形参)个数和类型匹配。

当被调函数执行时,首先计算实参表达式,并将结果值传送给行参,然后执行函数体,返回的返回值被传送到调用函数。

如果函数调用后有返回值,调用表达是可以用在表达式中,而无参函数的调用是一个单独的语句。

2.1.3 选择结构

2.1.

3.1 用if语句实现选择结构设计

if语句的基本形式可分为两种:

(1)if (表达式) 语句

其执行过程是,首先计算表达式的值,若不为0,条件判断为真,则执行( )后面的语句,否则,if语句中止执行,即不执行( )后面的语句。

(2)if(表达式) 语句1

else 语句2

其执行过程是,首先计算表达式的值,若不为0,条件判断为真,则执行( )后面的语句,否则执行语句2。

2.1.

3.2 if语句嵌套

if语句中的任何一个子句可以是任意可执行语句,当然也可以是一条if语句,这种情况称为if语句嵌套。当出现if语句的嵌套时,不管书写格式如何,else

格式都将与它前面最靠近的未曾配对的if语句相配对,构成一条完整的if语句。它的格式为:

if(表达式1) 语句1;

else if (表达式2)语句2;

……

else if (表达式n)语句n;

else 语句n+1;

2.1.

3.3 while和do-while语句

while语句用来实现“当型”循环结构,即先判断表达式,然后判断循环条件是否成立。其一般形式为:

do

{

语句;//循环体

}while(条件表达式);

其中要注意的是while后面的括号理是表达式而不是语句,表达式是没有分号的;而do-while中最后结束时要有分号。

2.1.4循环结构

2.1.4.1 for语句

这种循环语句不仅用于循环次数已知的情况,还能用于循环次数预先不能确定只给出循环结束条件的情况下。

for 语句的一般形式:

for (表达式1;表达式2;表达式3)

{

语句;//循环体

}

其执行的过程有以下几个步骤:

求解表达式1;

求解表达式2,若其值为真,则执行for语句中指定的循环体语句,然后执行下面的第3)步。若为假,则结束循环;

求解表达式3;

转回上面第2)步继续执行;

循环结束,执行for语句后面的其他语句。

2.2总体方案

显然问题的关键在于如何判定某个皇后所在的行、列、斜线上是否有别的皇后;可以从矩阵的特点上找到规律,如果在同一行,则行号相同;如果在同一列上,则列号相同;如果同在\斜线上的行列值之和相同;如果同在/斜线上的行列

值之差相同;如果斜线不分方向,则同一斜线上两皇后的行号之差的绝对值与列号之差的绝对值相同。下图是一个范例(是棋盘中八皇后位置显示)

将把皇后问题用三种方法表示出来,三种方法用switch语句连接.

●○○○○○○○

○○○○●○○○

○○○○○○○●

○○○○○●○○

○○●○○○○○

○○○○○○●○

○●○○○○○○

○○○●○○○○

棋盘中的八皇后位置显示

2.3 软硬件的需求

1)系统要求:win98以上操作系统;

2) 语言平台:tc++或vc++6.0;

2. 4 功能需求

当运行程序时,在屏幕上显示每一种方法八个皇后的相对位置,要用比较

直观的界面显示。

3.模块及算法设计

3.1算法描述

3.1.2 回溯法

回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。

可用回溯法求解的问题P,通常要能表达为:对于已知的由n元组(x1,x2,…,xn)组成的一个状态空间E={(x1,x2,…,xn)|xi∈Si ,i=1,2,…,n},给定关于n元组中的一个分量的一个约束集D,要求E中满足D的全部约束条件的所有n元

组。其中Si是分量xi的定义域,且|Si|有限,i=1,2,…,n。我们称E中满足D

的全部约束条件的任一n元组为问题P的一个解。

回溯法首先将问题P的n元组的状态空间E表示成一棵高为n的带权有序树T,把在E中求问题P的所有解转化为在T中搜索问题P的所有解。树T类似于检索树,它可以这样构造:

设Si中的元素可排成xi(1) ,xi(2) ,…,xi(mi-1) ,|Si| =mi,i=1,2,…,n。从根开始,让T的第I层的每一个结点都有mi个儿子。这mi个儿子到它们的双亲的边,按从左到右的次序,分别带权xi+1(1) ,xi+1(2) ,…,xi+1(mi) ,i=0,1,2,…,n-1。照这种构造方式,E中的一个n元组(x1,x2,…,xn)对应于T中的一个叶子结点,T的根到这个叶子结点的路径上依次的n条边的权分别为x1,x2,…,xn,反之亦然。另外,对于任意的0≤i≤n-1,E中n元组(x1,x2,…,xn)的一个前缀I元组(x1,x2,…,xi)对应于T中的一个非叶子结点,T的根到这个非叶子结点的路径上依次的I条边的权分别为x1,x2,…,xi,反之亦然。特别,E 中的任意一个n元组的空前缀( ),对应于T的根。

因而,在E中寻找问题P的一个解等价于在T中搜索一个叶子结点,要求从T 的根到该叶子结点的路径上依次的n条边相应带的n个权x1,x2,…,xn满足约束集D的全部约束。在T中搜索所要求的叶子结点,很自然的一种方式是从根出发,按深度优先的策略逐步深入,即依次搜索满足约束条件的前缀1元组(x1i)、前缀2元组(x1,x2)、…,前缀I元组(x1,x2,…,xi),…,直到i=n为止。

在回溯法中,上述引入的树被称为问题P的状态空间树;树T上任意一个结点被称为问题P的状态结点;树T上的任意一个叶子结点被称为问题P的一个解状态结点;树T上满足约束集D的全部约束的任意一个叶子结点被称为问题P的一个回答状态结点,它对应于问题P的一个解。

3.2.详细流程图

解决八皇后问题的基本流程图

数据初始化

从当前点当前方向开始,判断能否向前走

结束程序

向前走一步

是否已到达目标位置

输出结果

新位置作为

当前点

方向数加1

方向数是否超界

退回一步

是否已经回到起点

4.程序代码

#include//数据流输入/输出

#include//参数化输入/输出

#include//定义杂项函数及内存分配函数

#include//定义输入/输出函数

//自定义一个类:CQueen

class cQueen {

int aQueen[8]; //可以在类外访问的私有成员(默认) int sum;

public: //只能被该类的成员函数所访问的公有成员cQueen(); //构造函数:确保每个对象正确地初始化int judge(int x,int y);

void show();

void step();

};

cQueen::cQueen()//通过构造函数对aQueen[1---8]初始化

{

sum=0;

for(int i=0;i<8;i++)

aQueen[i]=0;

}

int cQueen::judge(int x,int y) //判断皇后摆放位置是否有冲突,如果没有冲突,则返回1;如果有冲突,则返回0;

{

for(int i=0;i

if(aQueen[i]==y||aQueen[i]+x-i==y || aQueen[i]-x+i==y) return 0;

return 1;

}

void cQueen::step() //一步一步进行查找摆放

{

int x=0,y=0;//标记皇后所在键盘位置,x代表行,y代表列

while(aQueen[0]<8)

{

while(y<8)

{

if(judge(x,y)) //调用类函数judge(x,y),如果aQueen[1---8]都已经标记,则执行该语句

{

aQueen[x]=y; //摆放皇后

x++; //进行下一行时

y=0; //y进行重置

}

else //否则,进入下一列

y++;

} //当执行到最后一列时,继续执行下一个if语句

if(y==8&&x!=8) //最后一列,从第一行开始

{

if(aQueen[--x]!=7)

y=++aQueen[x];

else if(aQueen[0]!=7)

y=++aQueen[--x];

else

aQueen[0]=8;

}

if(x==8) //最后一行

{

show(); //x,y从至结束,大循环结束

if(aQueen[--x]!=7)

y=++aQueen[x];

else

y=++aQueen[--x];

}

}

}

void cQueen::show()//输出棋盘状态

{

cout<<"(非递归法)皇后摆放方式的第"<<++sum<<"种情况:"<

for(int i=0;i<8;i++) //输出八皇后的各种状态,有皇后的位置用@ 表示,没有皇后的位置用* 表示

{

for(int j=0;j

cout<

cout<

for(j++;j<8;j++)

cout<

cout<

}

cout<

for(int k=0;k<8;k++)

cout<<'('<

cout<

system("pause");//从程序里调用pause命令,一个结果一个结果看}

void main()

{

cQueen a;

a.step();

}

5.程序调试分析

1)运行时有些函数的头文件未定义,导致无法进行编译;而且在调试时有些头文件的使用范畴弄混淆了;

2)在统计方法的个数时,未将累加的那个整型变量进行初始化,导致无法显示,八皇后摆放的是“第X种情况”,也无法统计出八皇后的排列方式是否一定是92种情况。

3)未用setw( )函数时,显示的结果相当难看,所定义的标志符都紧靠在一起;多加了一个换行符后,各种情况的间距增大,阅读时舒服多了;

4)如果将92种情形全部打印,则前面的几十种情况将无法显示出,要想看到前面的状态,必须添加一个控制语句,使其能一个一个的输出。

6.运行与测试

(这是把X,Y以及皇后第一种方法运行后显示的界面,其中*是棋盘中棋子的位置,@是棋盘中皇后的位置,坐标表示在当前情况下皇后所处位置)

(这是把X,Y以及皇后第二种方法运行后显示的界面,其中*是棋盘中棋子的位置,@是棋盘中皇后的位置,坐标表示在当前情况下皇后所处位置)

(这是把X,Y以及皇后第三种方法运行后显示的界面,其中*是棋盘中棋子的位置,@是棋盘中皇后的位置,坐标表示在当前情况下皇后所处位置)

(这是把X,Y以及皇后第九十二种方法运行后显示的界面,其中*是棋盘中棋子的位置,@是棋盘中皇后的位置,坐标表示在当前情况下皇后所处位置,此时,按任意键便可以退出八

皇后的运行界面)

7.总结

就编写的程序而言,虽然能达到预期的结果,但在运行时所需的时间比较长,而且总体结构还不够简洁,不太容易去理解。许多问题还需要继续研究,许多技术还需要更多的改进。去图书馆借了不少书,也去网上看了些资料,只是对大概的知识有了点了解,但还是很难着手于写代码,后来就按照老师说的,先搞清楚原理,再考虑如何去实现!后来又去上网查看相关资料,又到图书馆借了很多书看,总算有头绪了。但在调试过程中,还是遇到了很多困难,后来通过了很多同的帮助才把问题解决了。

通过这次的课程设计,让我了解了八皇后这一经典的问题。同时让我更好地掌握了栈思想以及一维数组等等知识,以及一些书本上没有的东西,这对我以后的学习生涯以及将来步入社会起到很大的帮助。这次课程设计虽然花了我很多时间和精力,但很值得,因为它对我能力提高起到很大帮助。这次课程设计也提醒我以前知识的匮乏,它给我敲响了警钟,让我意识到自己基础的不扎实.当然这次实验还是有很多问题的。比如程序设计的界面不够好,一些程序并非自己所写,而是修改某些程序而成,但这些不该,在下次课程设计时不会再发生.

在编写代码时,我希望能随机选择一数 X(1~92)后,能输出该种情况所对应的八个皇后的摆放方式和每个皇后所在的位置,但想了好久,就是无法实现。而且,当92种情况都输出时,前面的几十种情况无法看到,要想让摆放皇后的图形和所在具体的位置一起输出,就得修改程序让使她们一个一个地输出,这样显然比较麻烦。

针对八皇后这个课题,也许表层只局限于对八个皇后的摆放,但还可以对更多的情况进行探讨分析,比如九皇后,十皇后等等。在报告正文中已经多次提到关于N皇后的设计方法,但只是一带而过,有些问题很难通过一个报告设计就轻而易举的得到解决,还需要花费更多的时间。也许随着皇后个数的增多,程序运行的时间将变得很长,我们能否将运行的时间缩短呢?

8.致谢

课程设计终于告一段落了,一周的努力过后,也算是颇有收获,很多以前不清楚、不熟悉的内容都在这一周的努力中得到了锻炼,感谢老师给予的大量帮助及指导,感谢同学们的帮助,才让我顺利完成了这次的课程设计!通过他们们的帮助,我深刻体会到:做程序设计需要团队共同努力,共同贡献自己的力量,才能编写出一段好的程序,谢谢你们!

在此,由衷的感谢指导教师王蕾的辛勤指导,让我认识这个课题、熟悉这个课题并且最后完成这个课题;感谢同组同学的互帮互助,提供那么多经典程序供我参考并且指出了许多我的编程过程中出现的问题;感谢我的导师,在我遇到困难难以完成时,他总会给我宝贵的建议,帮助我战胜困难;感谢参考文献的原作者,以及给过我帮助的所有人员!可以说本次的实验并不是仅仅有我一个人在努力,是通过的大家的帮助,和我个人的劳动共同得出的,我不会忘记你们给我的支持,谢谢你们!

感谢帮助过我的每一个人!谢谢!!

参考文献

1 郑莉,董渊.C++语言程序设计.第四版. 清华大学出版社

2 求是科技.C&C++实效编程百例.人民邮电出版社,2004

3 蒋爱军,李师贤,梅骁勇.C++ Primer习题解答.第四版.人民邮电出版社

4 於春景.实用C++调试指南.华中理工大学出版社,2006

5 徐惠民.C++大学基础教程.人民邮电出版社,2004

6 於春景.实用C++调试指南.华中理工大学出版社,2006

八皇后问题的解决完整文档

工学院 数据结构课程设计报告设计题目:八皇后 2008 年 6 月25 日 设计任务书

摘要: 八皇后问题要求在一个8*8的棋盘上放上8个皇后,使得每一个皇后既攻击不到另外七个皇后,也不被另外七个皇后所攻击.按照国际象棋的规则,一个皇后可以攻击与之处在同一行或同一列或同一斜线上的其他任何棋子.因此,八皇后问题等于要求八个皇后中的任意两个不能被放在同一行或同一列或同一斜线上。 而本课程设计本人的目的也是通过用c++语言平台将一个8*8的棋盘上放上8个皇后,使得每一个皇后既攻击不到另外七个皇后,也不被另外七个皇后所攻击的92种结构予以实现.使用递归方法最终将其问题变得一目了然,更加易懂。 关键词:八皇后; c++; 递归法

目录 1. 课题综述 (1) 1.1课题的来源及意义 (1) 1.2面对的问题 (1) 2. 需求分析 (1) 2.1涉及到的知识 (2) 2.2软硬件的需求 (2) 2.3功能需求 (2) 3. 概要设计 (2) 4. 详细设计和实现 (3) 4.1算法描述及详细流程图 (3) 4.1.1算法描述 (3) 4.1.2算法流程图 (3) 5. 代码编写及详细注释 (4) 6. 程序调试 (8) 6.1调试过程、步骤及遇到的问题 (8) 7. 运行与测试 (8) 7.1运行演示 (8) 总结 (10) 致 (11)

参考文献 (12) .

1. 课题综述 1. 1课题的来源及意义 八皇后问题是一个古老而著名的问题,该问题是十九世纪著名的数学家高斯1850年提出的。 在国际象棋中,皇后是最有权利的一个棋子;只要别的棋子在它的同一行或同一列或同一斜线(正斜线或反斜线)上时,它就能把对方棋子吃掉。所以高斯提出了一个问题:在8*8的格的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后都不能处于同一列、同一行、或同一条斜线上面,问共有多少种解法。 到了现代,随着计算机技术的飞速发展,这一古老而有趣的数学游戏问题也自然而然的被搬到了计算机上。运用所学计算机知识来试着解决这个问题是个锻炼和提高我自己编程能力和独立解决问题能力的好机会,可以使我增强信心,为我以后的编程开个好头,故我选择了这个有趣的课题。 1. 2 面对的问题 1)解决冲突问题: 这个问题包括了行,列,两条对角线; 列:规定每一列放一个皇后,不会造成列上的冲突; 行:当第I行被某个皇后占领后,则同一行上的所有空格都不能再放皇后,要把以I为下标的标记置为被占领状态; 2)使用数据结构的知识,用递归法解决问题。 2. 需求分析

102工程估价课程设计任务书

102工程估价课程设计任务书

《工程估价》课程设计指导书 设计题目二层办公楼工程量清单使用班级工程102班 设计时间1周 指导教师陈德义谭湘倩李军红

2013年6 月17 日 《工程估价》课程设计指导书 编制一份工程量清单文件,是进行“工程估价”课程教学的一个重要环节。在学习了有关理论和方法之后,在教师的指导下通过学生自己动手,编制一个实际工程项目的工程量清单,对于掌握工程量的计算规则、工程量清单项目的设置、工程量清单的编制方法以及今后的估价工作具有重要的指导作用。通过这一课程设计阶段的学习,应力求实现对已学相关知识的巩固、对实际操作的深刻理解和总体把握,并为今后参加全国造价员考试、注册造价工程师考试以及今后从事这方面的工作打下良好的基础。 一、设计任务 1、熟悉设计资料 (1)熟悉设计文件 (2)在开列项目前认真学习工程量清单计算规范等相应设计依据 2、计算清单工程量 计算清单工程量是一项繁重和细致的工作。由于其精确度和速度直接影响到今后工程估价的质量,因此请同学们学会按一定的程序和工程量计算规则进行计算,防止产生漏算、重算和错算的现象。为此,应注意以下事项。 (1)由于漏算是初学者最容易犯的错误。为避免漏项,应按照工程量清单计价规范附录中章节的顺序,对本工程项目一一开列和计算。 (2)清单工程量小数位的取定,按计价规范的要求,计算过程中一般保留到小数点后两位。 (3)开列清单项目时,项目特征的描述要做到完整和准确。 3、编制工程量清单表

根据前面已计算出来的清单工程量,严格按照工程量清单计价规范中的格式完成工程量清单文件。 二、设计要求 1、每人独立完成工程量清单项目的列项,工程量计算以及清单文件的 编制。2、设计格式参照毕业设计格式要求。 3、最后成果按A4纸规格打印。 三、工程概况 本工程为一栋2层混凝土框架结构的办公楼,详见《建筑工程估价》附录工程2设计图纸。 四、进度安排 1、熟悉图纸开列清单项目0.5天 2、计算建筑面积和土石方工程项目0.5天 3、计算基础与砌筑工程项目1天 4、计算混凝土与钢筋混凝土工程项目 1.5天 5、计算其他房屋工程清单项目0.5天 6、计算装饰装修工程清单项目1天 7、措施项目1天 8、编写设计说明和成果汇总0.5天 9、检查并完善设计文件0.5天 六、设计成果 1、封面(见附录一) 2、设计说明 3、目录 4、清单表部分严格按照《建设工程工程量清单计价规范》执行 (见附录二表-01---表-12) 5、封底 七、参考资料 1、设计图纸

数据结构课程设计(C++)_八皇后动态演示原代码

//运行环境TC3.0 #include //调用数学函数库 #include //调用标准输入输出函数库 #include #include //调用图形函数库 #include #define MAX 8 //定义棋盘格数(特别是横轴方向上)int board[MAX]; //纵轴方向格数 void Drow() //画棋盘 { int i; int Driver=VGA,Mode=VGAHI; //初始化显示器 initgraph(&Driver,&Mode,"d:\\tc\\bgi"); setfillstyle(SOLID_FILL,BLUE); //棋盘底色模式 bar(5,15,600,500); //棋盘外框(二维) setcolor(YELLOW); //棋盘边框颜色 for(i=0;i<=9;i++) { line(10,20+50*i,460,20+50*i); //画行 } for(i=0;i<=9;i++) { line(10+50*i,20,10+50*i,470); //画列 } line(460,20,560,20); line(10,470,560,470); line(560,470,560,20); setcolor(RED); outtextxy(465,30,"WuShangjie"); //版权注释 outtextxy(465,45,"Eight Queue"); outtextxy(465,60,"CopyRight2.0"); outtextxy(415,440,"Start"); //屏幕输出文本坐标标记 outtextxy(385,440,"0"); outtextxy(335,440,"1"); outtextxy(285,440,"2"); outtextxy(235,440,"3"); outtextxy(185,440,"4"); outtextxy(135,440,"5"); outtextxy(85,440,"6"); outtextxy(35,440,"7"); outtextxy(415,455,"Point");

数据结构课程设计报告-8皇后问题

数据结构课程设计 选题:八皇后问题 姓名: 学号: 指导老师: 目录 一.选题概述---------------------------------------3

二.设计要求与分析--------------------------------3 三.数据结构与定义--------------------------------4 1.结构体定义 2.函数定义 3.函数之间的定义 四.程序段与分析----------------------------------5 五.完整程序代码及运行结果截图------------------7 六.心得体会--------------------------------------10 七.参考文献--------------------------------------10

一.选题概述: 在实际应用中,有相当一类问题需要找出它的解集合,或者要求找出某些约束条件下的最优解。求解时经常使用一种称为回溯的方法来解决。所谓回溯就是走回头路,该方法是在一定的约束条件下试探地搜索前进,若前进中受阻,则回头另择通路继续搜索。为了能够沿着原路逆序回退,需用栈来保存曾经到达的每一个状态,栈顶的状态即为回退的第一站,因此回溯法均可利用栈来实现。而解决八皇后问题就是利用回溯法和栈来实现的。 二.设计要求与分析 八皇后问题是在8x8的国际象棋棋盘上,安放8个皇后,要求没有一个皇后能够“吃掉”任何其他一个皇后,即没有两个或两个以上的皇后占据棋盘上的同一行、同一列或同一条对角线。 八皇后在棋盘上分布的各种可能的格局,其数目非常大,约等于232种,但是,可以将一些明显不满足问题要求的格局排除掉。由于任意两个皇后不能同行,即每一行只能放置一个皇后,因此将第i个皇后放置在第i行上。这样在放置第i个皇后时,只要考虑它与前i 一1个皇后处于不同列和不同对角线位置上即可。因此,其算法基本思想如下: 从第1行起逐行放置皇后,每放置一个皇后均需要依次对第1,2,…,8列进行试探,并尽可能取小的列数。若当前试探的列位置

轨道工程课程设计任务书、指导书及设计要求

轨道工程课程设计任务书 一、出发资料 1.机车车辆条件:韶山Ⅲ(SS3)型电力机车;机车轴列式30-30,轴距布置为230+200+780+200+230 (cm),轮重。 2.线路条件: (1)线路设计速度80km/h,最小曲线半径500m(实设超高为100mm),规划采用有砟轨道结构。 (2)线路铺设成无缝线路,铺设地区为福州,铺设线路长度为10km。 (3)道床顶面的容许应力为,路基顶面的容许应力为。 二、设计任务 (1)进行有砟轨道结构设计,包括钢轨和扣件的选型,轨枕的类型及布置根数,道床的等级及尺寸,并检算强度是否满足使用要求。 (2)进行无缝线路设计,包括设计锁定轨温确定、缓冲区设计、预留轨缝确定、轨条布置。 三、提交的成果 (一)、设计计算说明书 (1)轨道结构选型。 (2)轨道结构强度检算。 (3)无缝线路设计计算。 (二)、设计图图纸 (1)轨道结构组装图及选型说明。(1张A3)

(2)轨道结构受力图(3张A4:钢轨弯矩和挠度1张,轨枕三个支承状态的弯矩分布,道床顶面、路基顶面、路基第二区域、路基第三区域应力)。 (3)无缝线路设计图(1张A4或A3,基本温度力图、轨条布置图及相关说明)。 设计指导书

一、课程设计的基本步骤: 课程设计的步骤如图1所示: 图1 课程设计步骤 二、设计方法 (一)、轨道结构选型设计 根据机车车辆和线路条件,确定钢轨、轨枕、扣件的类型及刚度、道床的等级及主要尺寸(厚度、顶宽和边坡坡度)。钢轨、轨枕及扣件的可选用类型从教材中选择,道床的等级及主要尺寸也参考教材的内容确定。 以下两点说明: 1、道床厚度的选择 道床厚度设计根据《铁路轨道设计规范》(TB10082-2005)和《地铁设计规范》(GB50157-2003)进行,为方便可根据运营条件从教材表1-1中选择。我们的轨道类型可参考中型轨道结构。 2、钢轨支座刚度D 钢轨支座刚度D的意义是使钢轨支点顶面产生单位下沉时所必须施加于支点顶面上的力,单位一般采用kN/mm表示。 D值的计算:1/D=1/D1+1/D2 教材(7-3) 式中D1为扣件刚度,其值由设计确定;D2为道床支承刚度,计算

人工智能课程设计报告-n皇后问题解读

人工智能课程设计报告 课班姓学程:人工智能课程设计报告级 : 名: 号: 指导教师:赵曼 2015年11月

人工智能课程设计报告 人工智能课程设计报告 课程背景 人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。 人工智能是对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。 人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种“复杂工作”的理解是不同的。 人工智能是计算机学科的一个分支,二十世纪七十年代以来被称为世界三大尖端技术之一(空间技术、能源技术、人工智能)。也被认为是二十一世纪三大尖端技术(基因工程、纳米科学、人工智能)之一。这是因为近三十年来它获得了迅速的发展,在很多学科领域都获得了广泛应用,并取得了丰硕的成果,人工智能已逐步成为一个独立的分支,无论在理论和实践上都已自成一个系统。 人工智能是研究使计算机来模拟人的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。人工智能将涉及到计算机科学、心理学、哲学和语言学等学科。可以说几乎是自然科学和社会科学的所有学科,其范围已远远超出了计算机科学的范畴,人工智能与思维科学的关系是实践和理论的关系,人工智能是处于思维科学的技术应用层次,是它的一个应用分支。从思维观点看,人工智能不仅限于逻辑思维,要考虑形象思维、灵感思维才能促进人工智能的突破性的发展,数学常被认为是多种学科的基础科学,数学也进入语言、思维领域,人工智能学科也必须借用数学工具,数学不仅在标准逻辑、模糊数学等范围发挥作用,数学进入人工智能学科,它们将互相促进而更快地发展。

数据结构课程设计之-八皇后问题

课程设计报告 课程名称数据结构课程设计 课题名称八皇后问题演示 专业通信工程 班级通信工程1081 学号 0103 姓名刘献文 指导教师田娟秀郭芳 2012年 7 月 6 日

湖南工程学院 课程设计任务书 课程名称数据结构 课题八皇后问题演示 专业班级通信工程1081 学生姓名刘献文 学号 0103 指导老师田娟秀郭芳 审批 任务书下达日期 2012 年 7 月 1 日 任务完成日期2012 年 7 月 6 日

1设计内容与设计要求 设计内容 (4)课题四:八皇后问题演示 八皇后问题是一个古老而着名的问题,是回溯算法的典型例题。该问题是十九世纪着名的数学家高斯1850年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。 设计思路:?解决8皇后时,在安放第i行皇后时,需要在列的方向从1到n试 探(j =1,…, n):首先在第j列安放一个皇后,如果在列、主对角线、次对角线方 向有其它皇后,则出现攻击,撤消在第j列安放的皇后。如果没有出现攻击,在第 j列安放的皇后不动,递归安放第i+1行皇后。 对于八皇后问题的实现,如果结合动态的图形演示,则可以使算法的描述更形象、更生动。要求用Turbo C或 MFC实现的八皇后问题的图形程序,能够演示全部的92组解。 选题方案: 所选题目根据学号确定,学号模6加1,即(学号%6+1)。如你的学号为9,则 所选题目号为:9%6+1=(题目4)。注意,所有的课题都要求用图形方式演示步骤 和结果。同学们可以自己针对数据结构课程中所讲算法来设计一个演示过程的算法。 设计要求: 课程设计报告规范 (1)需求分析 a.程序的功能。 b.输入输出的要求。 (2)概要设计 a.程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块 的功能。 b.课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的 结构,它们之间有什么关系等。 (3)详细设计

给水管网课程设计任务书、指导书

长春建筑学院 给水排水管网系统A课程设计 任务书 姓名:玄敏 专业:给排水科学与工程 班级学号:水1402 15 指导教师: 日期:2016.11.4-20.16.11.25 城建学院

一、设计题目 吉林省珲春市春华镇给水管网工程初步设计。 二、设计目的 本课程设计是学生在学习《给水排水管网系统》的基础上,综合应用所学的理论知识,完成给水管网设计任务。其目的是培养学生综合应用基础理论和专业知识的能力,同时培养学生独立分析和解决给水管网设计问题的能力,并进一步进行绘图练习及计算机绘图,加强利用参考书的能力。通过给水管网工程设计,使学生了解给水管网的设计步骤和方法,掌握方案的设计、参数的选择、说明书的编写,为今后的毕业设计和实际工程设计打下良好基础。 三、原始资料 1. 吉林省珲春市春华镇规划图1张(1:10000,等高线间距1m)。 2.总平面图上等高线间距:1m; 3.城市人口分区、房屋层数见下表; 4.使用城市给水管网的工厂,其位置见图纸: (1)冶炼厂,生产用水为950m3/d,重复利用率0%。工人总数:2700人,分三班工作,一班早8:00—晚16:00点,二班16:00—24:00点,三班24:00—8:00点。其中热车间工作的工人占全部工人的30%。 淋浴情况: 每班下班后一小时淋浴时间。 (2)纺织厂,生产用水为850m3/d,重复利用率0%。工人总数1200人,分三班工作,一班早8:00—晚16:00点,二班16:00—24:00点,三班24:00—8:00点。其中热车间工作的工人占全部工人的20%。

淋浴情况: 每班下班后一小时淋浴时间。 5.浇洒绿地和道路用水:每次每区70m3。 6.火车站用水:300 m3/d 。 7. 用水量逐时变化: 逐时用水量(%) 四、设计任务 新建给水管网初步设计。 五、设计成果及要求 1.计算要求 (1)认真阅读课程设计任务书,弄懂设计意图及设计要求; (2)结合地形条件划分给水区域,布置给水管网,确定水流方向与管网节点; (3)计算最高日最高时的用水量; (4)进行管网水力计算; (5)水力工况分析; (6)泵站与清水池的计算。

数据结构课程设计-八皇后问题

目录 1、课程设计的目的 (1) 2、课程设计的要求 (1) 3、课程设计的内容 (1) 3.1设计的内容 (1) 3.2算法思路 (1) 3.2.1算法的内容 (1) 3.2.2算法中函数的流程图 (1) 3.3程序调试与测试以及结果的分析 (3) 3.3.1详细设计 (3) 3.3.2遇到的问题及解决方法 (6) 3.3.3 算法的时空分 (6) 3.3.4结果分析 (6) 3.3.5 算法的改进 (6) 3.3.6 程序使用说明 (6) 3.3.7 测试结果 (7) 4、总结 (10) 5、参考文献 (10) 6、附录 (11)

八皇后问题 1、课程设计的目的 (1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; (2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力; (4)训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风; 2、课程设计的要求 (1)设计的课题能够体现数据结构和算法的算法分析、设计、算法实现。 (2)根据自己对数据结构和算法的基本概念、原理和机制的理解,自拟题目和设计内容,选题尽可能结合实际的应用。 3、课程设计的内容 3.1设计的内容 八皇后问题是一个古老而著名的问题,该问题是十九世纪著名的数学家高斯1850年提出的,并作了部分解答。高斯在棋盘上放下了八个互不攻击的皇后,他还认为可能有76种不同的放法,这就是有名的“八皇后”问题。 在国际象棋中,皇后是最有权利的一个棋子;只要别的棋子在它的同一行或同一列或同一斜线(正斜线或反斜线)上时,它就能把对方棋子吃掉。所以高斯提出了一个问题:在8*8的格的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后都不能处于同一列、同一行、或同一条斜线上面,问共有多少种解法。现在我们已经知道八皇后问题有92个解答。 我要设计的程序就是怎样把92种解答直观清晰的让大家了解和认识。 3.2算法思想 3.2.1算法的内容 (1)解数组a,a[i]表示第i个皇后放置的列,范围为1~8。 (2)行冲突标记数组b,b[j]=0 表示第j行空闲,b[j]=1 表示第j行被占领,范围为1~8。(3)对角线冲突标记数组c、d。c[i-j]=0 表示第(i-j)条对角线空闲,c[i-j]=1 表示第(i-j)条对角线被占领,范围-7~7。d[i+j]=0 表示第(i+j)条对角线空闲,d[i+j]=1 表示第(i+j)条对角线被占领,范围2~16。 (4)抽象数据类型的定义 Print() //打印每一列皇后的放置的行数以及以矩阵形式形象的显示皇后的放置位置JudgeQueen1() //递归寻找摆放皇后位子 void main() //主函数调用 3.2.2算法中函数的流程图 (1)数据初始化。 (2)从n列开始摆放第n个皇后(因为这样便可以符合每一竖列一个皇后的要求),先测试当

八皇后问题讲解

计算机科学与技术专业 数据结构课程设计报告设计题目:八皇后问题

目录 1需求分析 (3) 1.1功能分析 (3) 1.2设计平台 (4) 2概要设计 (4) 2.1算法描述 (5) 2.2算法思想 (6) 2.3数据类型的定义 (6) 3详细设计和实现 (7) 3.1算法流程图 (7) 3.2 主程序 (7) 3.3 回溯算法程序 (8) 4调试与操作说明 (10) 4.1调试情况 (10) 4.2操作说明 (10) 5设计总结 (12) 参考文献 (13) 附录 (13)

1需求分析 1.1功能分析 八皇后问题是一个古老而著名的问题,该问题是十九世纪著名的数学家高斯1850年提出的,并作了部分解答。高斯在棋盘上放下了八个互不攻击的皇后,他还认为可能有76种不同的放法,这就是有名的“八皇后”问题。 在国际象棋中,皇后是最有权利的一个棋子;只要别的棋子在它的同一行或同一列或同一斜线(正斜线或反斜线)上时,它就能把对方棋子吃掉。所以高斯提出了一个问题:在8*8的格的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后都不能处于同一列、同一行、或同一条斜线上面,问共有多少种解法。现在我们已经知道八皇后问题有92个解答。 1、本演示程序中,利用选择进行。程序运行后,首先要求用户选择模式,然后进入模式。皇后个数设0

《房屋建筑学》课程设计任务书解析

桂林理工大学博文管理学院 课程设计指导书(2012 ~2013 学年度第二学期) 系(部):建工系 实习名称:房屋建筑学课程设计 实习负责人: 联系电话: 2013 年 5 月20 日

《房屋建筑学》课程设计任务书 一、设计题目 某多层单元住宅设计(题目自拟) 二、目的要求 通过《房屋建筑学》课程的学习和课程设计实践技能训练 1.培养学生综合运用设计原理及构造知识去分析问题、解决问题的能力 2.掌握建筑施工图设计的基本方法和内容。 3.进一步训练建筑绘图的能力。 三、设计条件 1.本设计为某城市型住宅,位于城市居住小区为单元式、多层住宅4~6层,总建筑面积不低于2500平方米。 2.设计要求,见下表。 户型A:四房二厅二卫二阳台户型B:三房二厅二卫*阳台 户型C:三房二厅二卫*阳台户型D:二房一厅一卫*阳台 户型E:二房二厅一卫*阳台户型F:一房一厅一卫*阳台 学生选做表 3.套型比可以自行选定,但必须满足总建筑面积,墙体均采用240mm墙。 4.耐火等级:Ⅱ级;屋面防水等级:Ⅱ~皿级。 5.结构类型:自定(砖混或框架)

6.房间组成及要求:功能空间低限面积标准参考(自己可以调节)如下:起居室18~25 m2(含衣柜面积) 主卧室12~16 m2 双人次卧室 12~14 m2 单人卧室8~10 m2 餐厅≥8 m2 厨房≥6 m2,包括灶台、调理台、洗地台、搁置台、上柜、下柜、抽油烟机等。 卫生间4~6 m2(双卫可适当增加),包括浴盆、淋浴器、洗脸盆、坐便器、镜箱、洗衣机位、排风道、机械排气等。 门厅:2~3 m2 贮藏室;2~4 m2(吊柜不计入) 工作室6~8 m2 四、设计内容及深度要求 本次设计参考教师给定的住宅方案,根据设计资料确定建筑方案,初步选定主要构件尺寸及布置,明确各部位构造做法。在此基础上按施工图深度要求进行,但因无结构、水、电等工种相配合,故只能局部做到建筑施工图的深度。设计内容如下; 1.单元平面图:至少2-3个套型,比例1:50(选做)。 2.建筑平面图(至少2个单元):包括底层平面、标准层平面图和屋顶平面图,比例1:10O,标准层必须有一个户型布置家具,其他房间标有名称和面积。 3.建筑立面图:包括正立面、背立面及侧立面图,比例1:100。 4.建筑剖面图;1个(必须剖到楼梯),比例1:100。 5.建筑详图: ①表示局部构造的详图,楼梯详图比例1:50、节点详图比例1:20。 ②表示房屋设备的详图(选作内容),如厨房、厕所、浴室以及壁柜、挂衣柜、 鞋柜、碗柜、灶台、洗涤盆、污水池、垃圾道、信报箱、阳台晒衣架等详图。数 量、比例自定。 6.设计简要说明、图纸目录、门窗表及技术经济指标等。 平均每套建筑面积=总建筑面积(m2)/总套数(套) 使用面积系数=〔总套内使用面积(m2)/总建筑面积(m2)〕X 100% 五、参考资料 1.《民用建筑设计通则》(JGJ 37-87) 2.《建筑楼梯模数协调标准》(GBJ 101-87) 3.《建筑设计防火规范》(GBJ 121-88) 4.住宅设计规范(GB50096—1999)。 5.《建筑设计资料集》第3册 6.《房屋建筑学》教材 7.地方有关民用建筑构、配件标准图集 8.《建筑构造资料集》 9.有关的建筑构造标准图集 10.《房屋建筑统一制图标准)(GBJ—86)

C++课程设计八皇后问题

南京理工大学紫金学院VC++课程设计报告 课程:VC++课程设计 系别:计算机系 班级: 学号: 姓名: 选题名称:八皇后问题 选题难易别:B级 起止时间:2011.11.21~2011.12.22 指导教师:朱俊 2011年 12 月

1.程序功能介绍 答:这个程序是用于解决八皇后问题的。八皇后问题等于要求八个皇后中的任意两个不能被放在同一行或同一列或同一斜线上。做这个课题,重要的就是先搞清楚哪个位置是合法的放皇后的位置,哪个不能,要先判断,后放置。我的程序进入时会让使用者选择程序的功能,选【1】将会通过使用者自己手动输入第一个皇后的坐标后获得答案;选【2】将会让程序自动运算出固定每一个皇后后所有的排列结果。 2.课程设计要求 答:(1)增加函数,完成每输入一组解,暂停屏幕,显示“按任意键继续!”。 (2)完善程序,编程计算八皇后问题共有集中排列方案。 (3)增加输入,显示在第一个皇后确定后,共有几组排列。 (4)将每组解的期盼横向排列输出在屏幕上,将五个棋盘并排排列,即一次8行同时输出5个棋盘,同样完成一组解后屏幕暂停,按任意键继续。 (5)求出在什么位置固定一个皇后后,解的数量最多,在什么位置固定皇后后,解的数量最少,最多的解是多少,最少的解是多少,并将最多,最少解的皇后位置及所有的解求出,同样5个一组显示。 3.对课程题目的分析与注释 答:众所周知的八皇后问题是一个非常古老的问题,问题要求在一个8*8的棋盘上放上8个皇后,使得每一个皇后既攻击不到另外七个皇后,也不被另外七个皇后所攻击。按照国际象棋的规则,一个皇后可以攻击与之处在同一行或同一列或同一斜线上的其他任何棋子。因此,本课程设计的目的也是通过用C++语言平台在一个8*8的棋盘上放上8个皇后,使得每一个皇后既攻击不到另外七个皇后,也不被另外七个皇后所攻击的92种结构予以实现。使用递归方法最终将其问题变得一目了然,更加易懂。首先要用到类,将程序合理化:我编辑了一个盘棋8*8的类:class Board,还有个回溯法的类:class Stack,关键的类好了,然后编辑好类的成员,然后编辑主函数利用好这些类的成员,让其运算出结果。 4.程序设计和说明(说明算法思想、设计思路,给出重要的、关键的代码) 答:算法思想:

(建筑工程设计)供热工程课程设计任务书

《供暖工程课程设计》指导书贵州大学矿业学院建筑环境与设备工程专业

《供暖工程课程设计》指导书 一、课程设计目的及要求 课程设计是专业课教学的重要组成部分,是理论学习的深化和应用。通过课程设计,使学生自觉地树立精心设计的思想,理论联系实际的学风,掌握—般民用或工业建筑供暖工程的设计程序、方法和步骤。了解和熟悉本领域的新材料、新设备、新方法和新技术。熟悉国家和地方的有关规定和技术措施,学会使用有关的技术手册和设计资料,提高计算和绘图技能,提高对实际工程问题的分析和解决能力。 二、设计步骤及设计说明书的编写 根据设计任务书中给定的设计题目及具体要求,按照收集资料热负荷计算确定方案水力计算绘制施工图的步骤进行设计,并将各步骤的主要依据成果与结论写入设计说明书。 设计主要内容及注意事项指示如下: (一)设计的原始资料 1.气象资料 根据设计任务书中给出的建筑物所在地区,在《采暖通风与空气调节设计规范》 (以下简称规范)中,查出该地区的有关气象参数(如供暖室外计算温度,冬季室外计算风速,冬季主导风向等)。 2.土建资料

的建筑特点(建筑物的方位、层数)和各部位的建筑构造与热工特征,外墙、屋顶、地面门窗构造)。 3.根据任务书中给出的热源条件,确定系统入口位置和热媒参数。 (二)围护结构耗热量计算 1.进行房间编号(注意各层编号竖向统一,编号用三位数字,首位数表示层数。) 2.根据房间使用特点,确定其室内计算温度n t (参阅《规范》)。 3.确定围护结构的传热系统K值,并校核外墙,天棚热阻是否满足《规范》要求。 4.进行围护结构耗热量计算 冷风渗透耗热量采用缝隙法,冷风侵入耗热量计算方法可自选.条件完全相同房间可只计算一个。 (三)散热器面积和片段的计算 确定散热器型式、安装方式、系统联接型式后,确定散热器内热媒平均温度pj t。 (四)供暖系统型式的确定,管道布置及水力计算。 1.合理确定供暖系统的型式,根据建筑物用途、特点比较各种系统形式,选择满足技术经济要求的最佳设计方案。 2.管道布置 管道布置应注意下列几点:

八皇后课程设计报告

淮阴工学院 C++程序设计课程设计报告 选题名称:八皇后 系(院):计算机工程系 专业:计算机科学与技术 班级:计算机1084 姓名: XXX 学号:XXXXXXXXXX 指导教师:戴峻峰、赵建洋 学年学期:2008 ~ 2009 学年第 2 学期 2009 年 6 月13 日

设计任务书 指导教师(签章): 年月日

摘要: 八皇后问题。这是由大数学家高斯于1850年首先提出来的,要求在8*8的方格国际象棋盘上放置8个皇后,任意两个皇后不能位于同一行,同一列或同一斜线(正斜或反斜线)上。输出所有可能的放法。分析:解此问题的基本思路为:开始时棋盘为空,第二个皇后可在第一行的任意位置上放置。一旦放置好第一个皇后,以后各行放置皇后时需检查当前列和同一斜线上是否已放置了皇后。如果未放置,则当前位置可放新的皇后,否则需试新的位置。假设前行的皇后已放好,现从当前行的第1列起选择适当的位置放置第5个皇后。显然第1,2列不能放置,因为这两个位置与第1,2行皇后的位置起冲突。第1个合适的位置是第3列(第4列也可以)。如果试探结果本行中没有合适的位置,则说明前面的皇后放置的位置不对,应回退到上一行,释放皇后原来占据的位置,改试下一个合适的位置。如果回退一行后本行仍然没有合适的位置,则继续回退;一旦当前的皇后放置好后,则前进一行放置下一个皇后。如此下去,直至8个皇后化全部放置好后,则前进一行放置下一个皇后。如此下去,直至8个皇后全部放置好时即可打印一个解。 关键词:八皇后,回溯法(试探法),递归法

目录 1 课程综述 (1) 1.1课程来源及意义 (1) 1.2预期目标 (1) 1.3面对的问题 (1) 1.4需解决的关键技术 (1) 2 需求分析联系 (1) 2.1涉及的知识基础 (1) 2.2解决问题的思路 (3) 2.3总体方案 (5) 2.4功能模块框图 (5) 3 模块及算法设计 (6) 3.1算法描述 (6) 3.2实现方法 (6) 3.3流程图 (7) 4 代码编写 (7) 5程序调试 (15) 5.1调试过程与步骤 (15) 5.2发现的问题 (15) 5.3解决的办法 (15) 6 运行与测试 (15) 7 结论 (17) 总结 (18) 致谢 (20) 参考文献 (21)

八皇后问题 C语言程序设计

八皇后问题学 2012年 9 月 5 日 目录 一、选题 1.1背景知识 (2) 1.2设计目的与要求 (2) 二、算法设计 2.1问题分析 (3) 2.2算法设计 (3) 三、详细设计 3.1源程序清单 (4) 四、调试结果及分析 4.1调试结果 (6) 4.2调试分析 (7) 五、课程设计总结 5.1总结及体会 (7) 六、答辩 6.1答辩记录 (8) 6.2教师意见 (8) 一、选题及背景知识 1.1 背景知识

在国际象棋中,皇后是一个威力很大的棋子,她可以“横冲直撞”(在正负或垂直方向走任意步数),也可以“斜刺冲杀”(在正负45度方向走任意步数),所以在8*8的棋盘上要布互相不受攻击的皇后,最多只能布八个,共92种布法,再也不能有别的布法了——这就是著名的八皇后问题 在8*8的国际象棋棋盘上,放置八个皇后,使得这八个棋子不能互相被对方吃掉。也就是说一个皇后可以攻击与之处在同一行或同一列或同一斜线上的其他任何棋子.因此,八皇后问题等于要求八个皇后中的任意两个不能被放在同一行或同一列或同一斜线上。 1.2 设计要求 要求:·判断在国际象棋中,能否在空棋盘上摆放8个皇后,并使其中任意两个皇后不能在同一行,同一列或同一对角线上。 ·编写完整的摆放八皇后问题的程序 ·具体要求第一个皇后的起始位置由键盘输入 二、算法设计 2.1问题分析 设计——图形表示下图中,Q代表皇后 假设在第k列上找到合适的位置放置一个皇后,要求它与第1——k-1列上的皇后不同行、列、对角线;可以从图上找到规律:不同列时成立,皇后放在第k列上;讨论行时,第j个皇后的位置(a[j] ,j)要与(i,k)位置的皇后不同行;如果同在/斜线上,行列值之和相同;如果同在\斜线上,行列值之差相同;如果斜线不分方向则同一斜线上两皇后的行号之差的绝对值与列号之差的绝对值相同,可表示为(|a[j]-i|=|j-k|)。 2.2 算法设计 利用计算机运行速度快的特点,采用枚举法,逐一尝试各种摆放方式,来判断最终摆法。其中判断是否同在对角线上用到了:行数差的绝对值与列数差的绝对值相等,

c++八皇后问题 课 程 设 计 报 告

八皇后问题 一、设计任务与目标 在8行8列的棋盘上放置8个皇后,皇后可吃掉与她处于同行或同列或同一对角线上的其他棋子,要使任一个皇后都不能吃掉其他的7个皇后,则需要同时控制同行,同列,同一条对角线的情况,然后当行,列,以及对角线都无皇后时,记录该点。并用“Q”表示皇后的位置,“+”表示其它位置。 二、方案设计与论证 定义4个具有全局作用域的数组int LineNum[9]; bool a[9], b[15]分别表示第几列的皇后要放的行位置,第几行上是否未放皇后,“/”斜对角线上是否未放皇后,“\”反斜对角线上是否未放皇后。通过语句“if ( a[j] && b[i+j-2] && c[i-j+7] ) LineNum[i]=j;”判断并实现一枚皇后是否放置安全。然而当第一枚皇后位置放置后,则它所在的行,列,以及对角线的记录状态需要改变后,才能进行下一枚皇后的放置。下一枚皇后判断位置的步骤与第一枚一样,所以可以用递归的方法进行下一枚皇后位置的放置。当第8枚皇后的位置确定后,就跳出递归。之后还要对之前每一个位置记录的情况初始化才能进行下一种放置八皇后的情况。

四、全部源程序清单 # include #include int LineNum[9]; //第i列的皇后要放的行位置(只用其中的列号1到8) bool a[9]; //a[i]为1表示第i行上尚未放皇后 bool b[15]; //b[i]为1表示第i条斜对角线上尚未放皇后(斜对角线指的 是"/"状对角线,该对角线上各点的行列号之和i+j为一个常数) bool c[15]; //c[i]为1表示第i条反斜对角线上尚未放皇后(反斜对角线指的是"\"状对角线,该对角线上各点的行列号之差i-j为一个常数)。 int num=0; //计数器,用于计算方法总数 class bahuanghou { int i; public: bahuanghou(int x) { i=x; } void solve(int); }; void bahuanghou::solve(int i) { int j; for(j=1;j<9;j++) {

地基与基础课程设计任务书 指导书

《土力学与地基基础》课程设计 第一部分墙下条形基础课程设计 一、墙下条形基础课程设计任务书 (一)设计题目 某教学楼采用毛石条形基础,教学楼建筑平面如图4-1 所示,试设计该基础。 (二)设计资料 ⑴工程地质条件如图4-2所示。 杂填土3 KN/m 16=γ粉质粘土 3 KN/m 18=γ3.0=b ηa MP 10=s E 6 .1=d η2 KN/m 196=k f 淤泥质土a 2MP =s E 2 KN/m 88=k f ⑵室外设计地面-0.6m ,室外设计地面标高同天然地面标高。 图4-1平面图 图4-2工程地质剖面图

⑶由上部结构传至基础顶面的竖向力值分别为外纵墙∑F1K=558.57kN,山墙∑F2K=168.61kN,内横墙∑F3K=162.68kN,内纵墙∑F4K=1533.15kN。 ⑷基础采用M5水泥砂浆砌毛石,标准冻深为1.2m。 (三)设计内容 ⑴荷载计算(包括选计算单元、确定其宽度)。 ⑵确定基础埋置深度。 ⑶确定地基承载力特征值。 ⑷确定基础的宽度和剖面尺寸。 ⑸软弱下卧层强度验算。 ⑹绘制施工图(平面图、详图)。 (四)设计要求 ⑴计算书要求书写工整、数字准确、图文并茂。 ⑵制图要求所有图线、图例尺寸和标注方法均应符合新的制图标准,图 纸上所有汉字和数字均应书写端正、排列整齐、笔画清晰,中文书写为仿宋字。 ⑶设计时间一周。

二、墙下条形基础课程设计指导书 (一)荷载计算 1.选定计算单元对有门窗洞口的墙体,取洞口间墙体为计算单元;对无门窗洞口的墙体,则可取1m 为计算单元(在计算书上应表示出来)。 2.荷载计算计算每个计算单元上的竖向力值(已知竖向力值除以计算单元宽度)。(二)确定基础埋置深度d GB50007-2002规定d min =Z d -h max 或经验确定d min =Z 0+(100~200)mm 。式中Z d ——设计冻深,Z d =Z 0·ψzs ·ψzw ·ψze ; Z 0——标准冻深; ψzs ——土的类别对冻深的影响系数,按规范中表5.1.7-1;ψzw ——土的冻胀性对冻深的影响系数,按规范中表5.1.7-2;ψze ——环境对冻深的影响系数,按规范中表5.1.7-3;(三)确定地基承载力特征值f a )5.0()3(m d b ak a -+-+=d b f f γηγη式中 f a ——修正后的地基承载力特征值(kPa );f ak ——地基承载力特征值(已知)(kPa); ηb 、ηb ——基础宽度和埋深的地基承载力修正系数(已知); γ——基础底面以下土的重度,地下水位以下取浮重度(kN/m 3); γm ——基础底面以上土的加权平均重度,地下水位以下取浮重度(kN/m 3);b ——基础底面宽度(m ),当小于3m 按3m 取值,大于6m 按6m 取值;d ——基础埋置深度(m )。(四)确定基础的宽度、高度 b ≥ h f F ?-γa k H 0≥[] 022 0b b b = -α式中F k ——相应于荷载效应标准组合时,上部结构传至基础顶面的竖向力值(kN )。当为柱下独立基础时,轴向力算至基础顶面,当为墙下条形基础时,取1m 长度内的轴向力(kN/m )算至室内地面标高处; γ——基础及基础上的土重的平均重度,取γ=20kN/m 3;当有地下水时,取γ' =20-9.8=10.2kN/m 3; h ——计算基础自重及基础上的土自重G K 时的平均高度(m )。b 2——基础台阶宽度(m);H 0——基础高度(m)。(五)软弱下卧层强度验算 如果在地基土持力层以下的压缩层范围内存在软弱下卧层,则需按下式验算下卧层顶面的地基强度,即 cz z p p +≤az f 式中 p z ——相应于荷载效应标准组合时,软弱下卧层顶面处的附加应力值(kP a ); p cz ——软弱下卧层顶面处土的自重压力标准值(kP a );

八皇后问题的解决完整文档

淮阴工学院 数据结构课程设计报告 设计题目:八皇后 系(院):计算机工程系 专业:信息安全 班级:信息 1 0 6 学生姓名: 叶青学号:1061303127 指导教师:张亚红寇海洲胡荣林夏森 学年学期: 2007 ~ 2008 学年第 2 学期 2008 年 6 月25 日

设计任务书

摘要: 八皇后问题要求在一个8*8的棋盘上放上8个皇后,使得每一个皇后既攻击不到另外七个皇后,也不被另外七个皇后所攻击.按照国际象棋的规则,一个皇后可以攻击与之处在同一行或同一列或同一斜线上的其他任何棋子.因此,八皇后问题等于要求八个皇后中的任意两个不能被放在同一行或同一列或同一斜线上。 而本课程设计本人的目的也是通过用c++语言平台将一个8*8的棋盘上放上8个皇后,使得每一个皇后既攻击不到另外七个皇后,也不被另外七个皇后所攻击的92种结构予以实现.使用递归方法最终将其问题变得一目了然,更加易懂。 关键词:八皇后; c++; 递归法

目录 1. 课题综述 (1) 1.1课题的来源及意义 (1) 1.2面对的问题 (1) 2. 需求分析 (1) 2.1涉及到的知识 (1) 2.2软硬件的需求 (1) 2.3功能需求 (2) 3. 概要设计 (2) 4. 详细设计和实现 (2) 4.1算法描述及详细流程图 (2) 4.1.1算法描述 (3) 4.1.2算法流程图 (3) 5. 代码编写及详细注释 (4) 6. 程序调试 (7) 6.1调试过程、步骤及遇到的问题 (7) 7. 运行与测试 (7) 7.1运行演示 (7) 总结 (9) 致谢 (10) 参考文献 (11) .

相关主题
文本预览
相关文档 最新文档