当前位置:文档之家› 四皇后实验报告

四皇后实验报告

四皇后实验报告
四皇后实验报告

篇一:四皇后问题实验报告

人工智能——四皇后问题

一、问题描述

四皇后问题

一个4×4国际象棋盘,依次放入四个皇后,条件:每行、每列及对角线上只允许出现一枚棋子。

设:data=l(表) x∈l x ∈﹛i j﹜1≤ i, j ≤4 其中:i j 表示棋子所在行列如:24 表示第二行第四列有一枚棋子∵棋盘上可放入的棋子数为0 ~ 4 个

∴l表中的元素数为0 ~ 4 个,即 length l = 0 ~ 4 ,如图a ﹛12,24,31,43 ﹜

定义规则: if1≤ i ≤4andlength data = i -1

thenappend(data( ij )) 1≤ j ≤4

①对于任一行i , 1≤ j ≤4 表明每行有四条规则。

比如第一行:r11,r12,r13,r14

②棋盘中共有四行,所以共有16条规则。

即: r11,r12,r13,r14

r21,r22,r23,r24

r31,r32,r33,r34

r41,r42,r43,r44

③ 16条规则中,哪些是当前可用规则,取决于data的长度,即:data中的元素个数。换言之,每次只能将一个棋子放在当前行的下一行。

二、回溯法搜索策略图讨论:

上述算法产生22次回溯,原因在于规则自然顺序排列,没考虑任何智能因素。改进算法定义对角线函数:diag(i,j):过ij点最长的对角线长度值。

规定:①如果: diag(i,k) ≤ diag(i,j) 则规则排列次序为: rik, rij 同一行四条规则中,对角线函数值小的排在前面

②如果:diag(i,k) = diag(i,j) 则规则排列次序为: rij ,rikj < k 对角线长度相等的规则按照字母排列顺序排序

讨论:

①利用局部知识排列规则是有效的。

② backtrack算法对重复出现的状态没有判断,所以可能造成出现死循环。③没有对搜索深度加以限制,可能造成搜索代价太大。

三、算法描述回溯法——在约束条件下先序遍历,并在遍历过程中剪去那些不满足条件的分支。

使用回溯算法求解的问题特征,求解问题要分为若干步,且每一步都有几种可能的选择,而且往往在某个选择不成功时需要回头再试另外一种选择,如果到达求解目标则每一步的选择构成了问题的解,如果回头到第一步且没有新的选择则问题求解失败。

在回溯策略中,也可以通过引入一些与问题相关的信息来加快搜索解的速度。对于皇后问题来说,由于每一行、每一列和每一个对角线,都只能放一个皇后,当一个皇后放到棋盘上后,不管它放在棋盘的什么位置,它所影响的行和列方向上的棋盘位置是固定的,因此在行、列方面没有什么信息可以利用。但在不同的位置,在对角线方向所影响的棋盘位置数则是不同的。可以想象,如果把一个皇后放在棋盘的某个位置后,它所影响的棋盘位置数少,那么给以后放皇后留下的余地就太大,找到解的可能性也大;反之留有余地就小,找到解的可能性也小。

四、算法流程图

五、源程序

#include <stdio.h>

#define n 4

char board[n][n];

int t;

int col[n]; //存储第i行对应的列的值,这样的(i,j)值满足当前棋盘上的皇后不能互相攻击。

int safetyplace(int x,int y) //(x,y)位置是否安全

{

int i,j;

for(i=0;i<x;i++)

{

j=col[i];

if(x==i||y==j)

return 0;

if(x-y==i-j||x+y==i+j) //判断左右对角线

return 0;

}

return 1;

}

void get_position(int i)//处在第i行时状态

{

int w,j;

char a[1]={3};

if(i==n) //输出棋盘

{

for (w=0;w<n;w++)

{

for (j=0;j<n;j++)

{

if(board[w][j]==001)

printf(%c ,board[w][j]);

else

{

printf(%c,a[0]);

printf(%c ,board[w][j]);

}

}

printf(\n);

}

printf(\n);

printf(--------------\n);t++;

}

else

{int u;

for (u=0;u<n;u++)

{ if (safetyplace(i,u)==1)

{

col[i]=u;//记录下第i行可行的列的位置 board[i][u]=001; //放置皇后

get_position(i+1);//转换到下一个状态,即下一行

col[i]=0; //回溯到当前状态,重置列和棋盘的值 board[i][u]=0; } }

}

}

main()

{

printf(%c是皇后!\n\n,001);

get_position(0);

printf(一共有%d种方法!\n,t);

}

六、结果截图

篇二:八皇后问题实验报告

实验报告

——八皇后问题求解(递归和非递归)

学号:专业年级:姓名:

一、需求分析(要实现的功能描述)

1.问题描述

八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当n = 1或n ≥ 4时问题有解。八皇后问题最早是由国际囯际象棋棋手马克斯·贝瑟尔于1848年提出。诺克也是首先将问题推广到更一般的n皇后摆放问题的人之一。

2.实现功能

八皇后问题实现了在棋盘上摆放八个皇后的功能,这八个皇后任意两个皇后都不能处于同一条横行、纵行或斜线上。

3.测试数据

测试数据可以通过手工寻找三组满足需要的值,测试数组(m,n),其中m代表皇后所在的行,n代表皇后所在的列。例如,第一组测试数据:

(1,4)、(2,7)、(3,3)、(4、8)、(5,2)、(6,5)、(7,1)、(8,6);第二组测试数据(1,5)、(2,2)、(3,4)、(4,7)、(5,3)、(6,8)、(7,6)、(8,1);第三组测试数据:(1,4)、(2,2)、(3,7)、(4,3)、(5,6)、(6,8)、(7,5)、(8,1)。最后与编程求得的结果进行比较。如果这三组数据在最后编程求得的结果中,说明程序的编写基本没有什么问题。

二、概要设计

在进行概要设计的过程中,要清楚整个程序包含的功能模块及模块间的调用关系。对于八皇后问题,整个程序中应该包括主函数模块,摆放皇后的函数模块,以及判断皇后的位置是否摆放正确的判断模块。对于模块间的关系,在运行主函数的过程中会调用摆放皇后的函数模块,在摆放皇后的函数模块中,又会调用判断皇后位置是否摆放正确的判断模块。

三、详细设计

抽象数据类型中定义的各种操作算法实现(用n-s图描述)对于求解八皇后问题的非递归算法,n-s图如下:对于八皇后问题求解的递归算法,n-s图如下:

四、调试分析

1.程序在调式过程中出现的问题及解决方法

由于对于c语言编程问题掌握的并非十分熟练,因而在程序的调试过程中出现了一些问题。例如,在编写位置冲突算法的过程中,在解决对角线问题上,没有考虑对角线有两条,只考虑了其中的一条,因而在编写程序的过程中,没有使用绝对值,导致得到的满足要求的测试结果比实际的要多得多。

再如,为了能够输出比较整齐的测试结果,开始的时候只是输出了皇后所在的列数,没有输出皇后的行数。后来,在添加了行数坐标后,两个程序输出了相同的比较整齐美观的测试结果。

2.算法的时间复杂度分析

在考虑算法的时间复杂度问题上,只需考虑每个函数的最大的时间复杂度即可,求得的最大的时间复杂度即为整个程序的时间复杂度。

对于递归程序的时间复杂度:

o(????)

对于非递归程序的时间复杂度:

o(????)

因而,对于递归和非递归程序两个程序的时间复杂度,递归程序的时间复杂度要高。

五、用户手册

由于在程序编写的过程中,使用的环境为visual c++ 6.0,因而在使用的过程中,最好使用visual c++ 6.0,以免在程序运行错误。

本程序的操作过程十分简单,不需要操作者有c语言基础。

六、测试结果

通过对于问题的编程求解,共得到了92种结果。从中任意选择三组数据进行测试。数组的第一个数值为皇后所在的行,第二个值为皇后所在的列。

第一组测试数据:

(1,4)、(2,7)、(3,3)、(4、8)、(5,2)、(6,5)、(7,1)、(8,6)用图像形象表示为:再如,第二组测试数据:

(1,5)、(2,2)、(3,4)、(4,7)、(5,3)、(6,8)、(7,6)、(8,1)

第三组测试数据:(1,4)、(2,2)、(3,7)、(4,3)、(5,6)、(6,8)、(7,5)、(8,1)由于空间有限,所以92种测试结果用数组的形式表示如下:篇三:八皇后实验报告

实验项目:

1. 实验目的:通过求解皇后问题,熟悉深度优先搜索法dfs(回溯法(backtracking algorithms)技术。

2. 实验内容:由n2个方块排成n行n列的正方形称为n元棋盘。如果两个皇后位于n元棋盘上的同一行、同一列或同一对角线上,则称它们在互相攻击。现要找出使棋盘上n个皇后互不攻击的布局。编制程序解决上述问题,以n=6运行程序,输出结果。

3. 程序简介:将n个皇后放到一个n*n的方阵中,要求每个皇后不在同一行同一列及同一对角线,我的程序是先把每个皇后放在了第零列,然后再按行检查,不符合要求继续下一列,若已经到这一行的最后一列,还没找到符合要求的位置,则回到上一行。

4. 算法设计介绍:

定义一个一维数组,数组的下标是皇后所在位置的行数,数组存的值是皇后所在位置的列数,现将a[0]-a[n-1]都赋成零,然后随着检查的进行,皇后的位置也在不断地变化,最后找到

一个符合要求的方阵时,本质上就是一个存放整数的一维数组,数组的下标是行数,存放的值是列数。

5.困难及解答

我很久以前就听说过八皇后问题,没想到现在轮到自己编了,一开始还真是特别糊涂呢,后来老师上课把算法大概讲了一遍,就清楚很多了,要说问题,就是一开始纠结怎么存放皇后,我开始想用二维数组着,后来老师说用一维数组比较好做,我看了一下老师的算法,就明白了大概,经过一段时间就编出来了

5. 心得

我编程变得还是很少,天天下决心说以后多编,也没践行,心想着吧,不挂在嘴上了,努力!

6. 程序清单

/*

// 我真诚地保证:

// 我独立完成了整个程序从分析、设计到编码的所有工作。

// 如果在上述过程中,我遇到了什么困难而求教于人,那么,我将在程序实习报告中

// 详细地列举我所遇到的问题,以及别人给我的提示。

// 我的程序里中凡是引用到其他程序或文档之处,

// 例如教材、课堂笔记、网上的源代码以及其他参考书上的代码段,

// 我都已经在程序的注释里很清楚地注明了引用的出处。

// 我从未没抄袭过别人的程序,也没有盗用别人的程序, // 不管是修改式的抄袭还是原封不动的抄袭。

// 我编写这个程序,从来没有想过要去破坏或妨碍其他计算机系统的正常运转

文件名称:

创建者:

创建时间:2011.4.14

最后修改时间:2011.4.17

功能:不同个数皇后的排列问题,各个皇后不再同一行同一列以及同一对角线

文件中的函数名称和简单功能描述:bool unguarded(int a[],int m),检查a[]-1列和第m-1行的皇后有没有设防

文件中定义的全局变量和简单功能描述:无

文件中用到的他处定义的全局变量及其出处:无

与其他文件的依赖关系:独立

2.关于类的说明:

类名称:无

定义该类的目的:

类属性:

类中函数及功能:

与其他类的关系(调用/被调用哪类对象中的什么函数):3. 关于函数的说明

(1) 函数名称:bool unguarded(int a[],int m)

函数功能描述:检查a[]-1列和第m-1的皇后是否设防函数调用之前的预备条件:一位数组和整数m

返回后的处理:返回一个bool型的变量,若true,则下一个进入方阵的皇后可以放在这,反之,则不能;

返回值(如果有的话):true or false

函数的输入参数:无

函数的输出参数:无

*/

#include iostream

#define max 100

using namespace std;

bool unguarded(int a[],int m)

{

int n;

for(n=0;n<m;n++)//从第零行开始检查

{

if((a[n]==a[m])||((a[n]+n)==(a[m]+m))||((a[n]-n)==(a[m]-m))||((n-a[n])==(m-a[m]) )) //这种检查方法不包含同一行的情况,因为m不可能等于n

}

return true;

}

int main()

{

int n,i,a[max],s=1;

//用一维数组表示皇后的位置的思想来自课堂笔记

cout<<请输入皇后的个数<<endl;

cin>>n;

if((n<=3)||(n>=100)) cout<<请不要输入1、2、3或者大于100的数!<<endl;//一个没有意义,两个和三个不管怎么放都会在同一行和同一列

else{

for(i=0;i<n;i++) a[i]=0;//先把每个皇后放在第一列,然后按行检察 i=0;//然后从第零行开始

while(i>=0) //回溯结束的条件

{

if(a[i]<=n-1) //当前行数的前边的每一行都要检查,从第零列 return false; 检查到第n-1列

四年级实验报告单

科学实验 四年级(上) 4课.小吊车 活动1:做小吊车(分组实验) 制作目的:做小吊车并研究小吊车原理 制作材料及工具:小纸盒吊车臂吊臂支架线绳两个铁丝钩一个剪刀锥子胶水钩码 制作过程: 1.小组分工合作 2.观察小吊车模型组装各部分 ①四个点要对称,固定牢固; ②绳子要从前往后穿,不要穿反了; 3.调试小吊车分别拉动两根线,看看小吊车的臂能否灵活运动. 实验现象:小吊车能提起或放下钩码 实验结论: 放松上牵引绳,拉紧下牵引绳,吊臂向下运动; 拉紧上牵引绳,放松下牵引绳,吊臂向上运动。 活动2:收与放 实验目的:推断动物与人的肢体运动原理(分组实验) 实验过程: 1. 弯曲手臂,感受上臂上下肌肉的长短松紧变化。 2.伸直手臂,感受上臂上下肌肉的长短松紧变化。

3.反复几次体会与小吊车的原理的联系。 实验现象:手臂骨骼就像小吊车的吊臂,肌肉就像绳子,手臂运动时,当肱二头肌收缩,肱三头肌舒张时,肱二头肌牵动前臂向内收缩;当肱三头肌收缩,肱二头肌舒张时,肱三头肌牵动前臂向外伸展. 实验结论:前臂收缩类似小吊车抬起重物。 前臂伸展类似小吊车放下重物。 6课.做沙盘(分组实验) 制作目的:通过制作校园沙盘模型培养学生的设计制作能力。 制作材料:硬纸板学校平面图橡皮泥潮湿的沙土废旧泡沫包装纸小木棍颜料盒剪刀 制作步骤: 对校园建筑的布局进行观测 2.用大的硬纸板做底座。在纸板上画好学校平面图。(明确建筑物.树木等的位置) 3.用橡皮泥旧泡沫等材料做出立体的楼房等校园建筑物,根据平面图摆放好位置。(可以用长方体或正方体的泡沫做楼房,硬纸板做围墙,小木棍做旗杆等)。 4.要注意建筑物的比例。(四年级的学生还不能很精确地计算出比例尺,教师适当指导。) 8课.快与慢 实验目的:研究小车运动的快慢(分组实验)

n后问题实验报告

一.实验目的 1. 了解皇后相互攻击的条件:如果任意两个皇后在同一行,同一列或同一对角线,则她们相互攻击。 2. 运用迭代的方法实现n皇后问题,求解得到皇后不相互攻击的一个解 二.实验内容 基本思路:用n元组x[1:n]表示n后问题的解,其中x[i]表示第i个皇后放在棋盘的第i行的第x[i]列。抽象约束条件得到能放置一个皇后的约束条件:(1)x[i]!=x[k]; (2)abs(x[i]-x[k])!=abs(i-k)。应用回溯法,当可以放置皇后时就继续到下一行,不行的话就返回到第一行,重新检验要放的列数,如此反复,直到将所有解解出。在回溯法中,递归函数Backtrack(1)实现对整个解空间的回溯搜索。Backtrack(i)搜索解空间的第i层子树。类Queen的数据成员记录解空间的节点信息,以减少传给Backtrack函数的参数。sum记录当前已找到的可行方案数。 运用回溯法解题通常包含以下三个步骤: (1)针对所给问题,定义问题的解空间; (2)确定易于搜索的解空间结构; (3)以深度优先的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索。 源代码: #include using namespace std; class Queen{ friend int nQueen(int); private: bool Place(int k); void Backtract(int t); int n,*x; long sum; //可行方案数 }; bool Queen::Place(int k) { for(int j=1;j

实验报告4

实验报告 课程名称软件开发技术 实验题目列表控件和树控件实验仪器计算机 系别机电工程学院 专业控制工程(专) 学号2014309030111 姓名惠振东 日期2014年10月29日

一、实验目的和要求 (1)创建一个对话框应用程序Ex_List,其主界面如图4.1所示。 (2)设计一个如图4.2所示的“学生课程成绩”对话框,创建并完善该对话框类CScoreDlg。 图4.1 Ex_List界面图4.2 “学生课程成绩”对话框 (3)实现功能:单击图4.1中的“学生课程成绩”按钮,弹出“学生课程成绩”对话框,单击“添加”按钮,学生课程成绩添加到列表控件。若选中列表项,“修改”按钮由原来的禁用变成可用,单击“修改”按钮,则弹出的“学生课程成绩”对话框中的“添加”按钮标题变成“修改”,单击“学生课程成绩”对话框中的“修改”按钮,该列表项的内容被修改。 (4)按照教材“树控件”中的示例进行实验。 二、实验准备和说明 (1)具备知识:图像列表、列表控件和树控件。 (2)创建本次实验工作文件夹“…\Visual C++程序\实验\实验4”。 三、实验内容和实验步骤 1.启动Visual C++ 6.0 打开计算机,启动Visual C++ 6.0系统。 2.创建对话框应用程序Ex_List,并设计其界面 ①选择“文件”→“新建”菜单,在弹出的“新建”对话框中选择“工程”页面,选择MFC AppWizard(exe),在工程框中输入Ex_List,并将工程文件夹定位到“…\Visual C++程序\实验\实验4”。 ②单击“确定”按钮,在出现的Step 1对话框中选择“基本对话(框)”应用程序类型,单击“完成”按钮。 ③在对话框编辑器中,单击对话框工具栏上的切换网格按钮,显示对话框网格,将对话框标题改为“列表控件”。 ④调整对话框的大小,删除对话框中间的“TODO: 在这里设置对话控制。”静态文本控件和“确定”按钮控件,将“取消”按钮标题改为“退出”,并移至对话框的下方。 ⑤添加两个按钮,一个是“学生课程成绩]按钮,ID为IDC_BUTTON_SCORE,另一个是“修改”按钮,ID为IDC_BUTTON_CHANGE。

CASS(NSS)试验箱操作规程

CASS试验箱操作规程 1、打开电源开关及气阀; 2、扳动右侧气动升降开关,打开箱盖,向箱内底部水槽加入自来水,至白色底板处(如水箱缺水则控制箱 处警示灯会点亮)。另外试验箱上部密封水槽内也需注水(自来水即可),水位漫过橡胶垫块即可; 3、从试验箱后部漏斗处加入饱和水箱用水(必须使用蒸馏水),水位高度可观察试验箱右侧水位标尺; 4、将配置好的试验溶液从上部圆口处加入溶液箱内; 5、将控制面板上计时器设定至最大(9000h); 6、将控制面板上连续开关打开,再打开设备运转开关;(确认喷雾压力值,喷雾压力为0.07-0.17Mpa); 7、按照试验要求将已用酒精擦拭过的零部件(实验前需拍照)逐一放入试验箱,并按要求摆放; 8、在检测看板上按试验时间放好各零部件的标贴,以便按试验时间不同分次取出; 9、试验品时间到后开箱取出并用清水进行冲洗,按国家试验标准进行评级并拍照; 10、需要停机或检修时,将饱和水箱、箱体及溶液箱内的水全部排掉,之后用自来水冲洗箱体内部及溶液箱; 11、关闭电源开关及进气阀。 CASS试验溶液配比方法: 1.将氯化钠溶于蒸馏水中,浓度为5%(既50±5g/L); 2.再加入氯化铜加入以上所得溶液中(浓度为0.26±0.02g/L); 3.最后在溶液中加入适量冰乙酸以保证试验箱内盐雾收集液的PH值为 3.1-3.3。喷雾前溶液的PH值为 3.0-3.1,用能读出0.1PH值变化的精密PH试纸作为日常检测,溶液的PH值可用冰乙酸调整。 NSS试验箱操作规程 1、打开箱盖; 2、向箱内底部及密封水槽内注水(自来水即可); 3、将浓度为5%NaCl溶液加入右侧溶液箱; 4、打开电源开关、气阀及运转开关,检查喷雾是否正常(喷雾量可通过上下调节喷雾口处锥形盖控制); 5、按照试验要求将已用酒精擦拭过的零部件(实验前需拍照)逐一放入试验箱,并按要求摆放; 6、在检测看板上按试验时间放好各零部件的标贴,以便按试验时间不同分次取出; 7、试验品时间到后开箱取出并用清水进行冲洗,按国家试验标准进行评级并拍照; 8、需要停机或检修时,将箱体及溶液箱内的水全部排掉,之后用自来水冲洗箱体内部及溶液箱; 9、关闭电源开关及气阀。 NSS试验溶液配比方法: 1.将氯化钠溶于蒸馏水中,浓度为5%(即50±5g/L)。 试验箱运行要求 1.在试验之前设备至少空运行24h必须测量收集液的PH值,以保证整个喷雾期的溶液PH值在规定范围内;2.试验样品试验表面与垂直成30o左右摆放不能相互接触,也不能受到盐雾的直接喷射; 3.NSS试验箱内温度为35℃±2℃,CASS试验箱温度为50℃±2℃,饱和水箱温度为50℃±2℃; 4.盐雾的沉降速度,经24h喷雾后,每80平方厘米面积上为1-2mL/h。

n皇后问题算法实验报告

算法分析与设计实验报告 实验内容:N皇后问题 实验时间:2013.12.3 姓名:杜茂鹏 班级:计科1101 学号:0909101605

一、实验内容及要求 在n×n格的棋盘上放置彼此不受攻击的n个皇后,按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 二、实验目的 1.巩固和加深对回溯法的理解 2.了解递归和迭代法在回溯法中的应用 三、算法分析 1.理解皇后不被攻击的条件:n后问题等价于在n*n格的棋盘上放置n个皇后,任何两个皇后不能放在同一行或同一列或同一斜线上。 2.算法模块简要分析 用数组存储皇后的位置,将i设置为0. Int place(*x,n) :数组x[] 用来表示列数,n为皇后个数,用来判断皇后是否被攻击,判断的条件是(x[i]-x[n]==i-n||x[i]-x[n]==n-i||x[i]==x[n])即用来判断“同一行或同一列或同一斜线上”。 Int print(*x,n):打印皇后解的空间。 Int iniprint(*x,n):初始化打印函数,相当于对棋盘初始化。将可以放皇后的位置记为“1”,不放皇后的位置记为“0”。 Int Nqueen(int n):n皇后问题求解,如果满足一组可行解,sum++。Int i=0,如果x[i]>=n的时候即进行下一行,i++;当i=n时,

sum++;输出该组可行解的个数和位置的矩阵。并且i--,回溯到上一层继续搜索可行解。 四、运行结果及分析 1、三皇后没有可行解 2、 2.4个皇后有2个可行解 3.5皇后有10个可行解 五、源代码 #include static int n, sum=0;//可行解个数 static int locate[20]; int place(int k) {//判断是否在一条线上并返回0,1 for(int i=1;in){

C上机实验报告实验四

实验四数组、指针与字符串 1.实验目的 1.学习使用数组 2.学习字符串数据的组织和处理 3.学习标准C++库的使用 4.掌握指针的使用方法 5.练习通过Debug观察指针的内容及其所指的对象的内容 6.联系通过动态内存分配实现动态数组,并体会指针在其中的作用 7.分别使用字符数组和标准C++库练习处理字符串的方法 2.实验要求 1.编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 3.编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 4.使用string类定义字符串对象,重新实现上一小题。 5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。 6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。 7. (选做)修改实验4中的选做实验中的people(人员)类。具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”定义为一个“日期”类内嵌对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中定义people类的对象数组,录入数据并显示。 3.实验内容及实验步骤 1.编写矩阵转置函数,输入参数为3*3整形数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。程序名:lab6_1.cpp。 2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。通过Debug观察指针的内容及其所指的对象中的内容。程序名:lab6_2.cpp。 3.编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。 4.使用string类定义字符串对象,编程实现两字符串的连接。在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。程序名:lab6_4.cpp。 5.在employee.h文件中定义Employee类。Employee类具有姓名、街道地址、城市和邮编等私有数据成员,在成员函数中,构造函数用来初始化所有数据成员;display()中使用cout显示

操作系统实验报告4

《操作系统》实验报告 实验序号: 4 实验项目名称:进程控制

Printf(“child Complete”); CloseHandle(pi.hProcess); CloseHandle(pi hThread); ﹜ 修改后: #include #include int main(VOID) { STARTUPINFO si; PROCESS_INFORMA TION pi; ZeroMemory(&si,sizeof(si)); si.cb=sizeof(si); ZeroMemory(&pi,sizeof(pi)); if(!CreateProcess(NULL, "c:\\WINDOWS\\system32\\mspaint.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si,&pi)) { fprintf(stderr,"Creat Process Failed"); return -1; } WaitForSingleObject(pi.hProcess,INFINITE); printf("child Complete"); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } 在“命令提示符”窗口运行CL命令产生可执行程序4-1.exe:C:\ >CL 4-1.cpp

实验任务:写出程序的运行结果。 4.正在运行的进程 (2)、编程二下面给出了一个使用进程和操作系统版本信息应用程序(文件名为4-5.cpp)。它利用进程信息查询的API函数GetProcessVersion()与GetVersionEx()的共同作用。确定运行进程的操作系统版本号。阅读该程序并完成实验任务。 #include #include

测绘程序实验报告

实验1 Visual C++.Net环境和程序设计初步 1.掌握 VC++ 语言的基本语法; 2.理解顺序结构、选择结构和循环结构程序设计的特点及应用; 3.掌握对基于对话框的 MFC 应用程序设计方法; 4.掌握一些简单算法。 5.编写一个方位角计算程序。提示:先使用反正切函数计算,然后利用坐标增量 的符号来判断所在的象限。 设计思路:在按钮下面添加程序。X Y同时大于0在第一象限,方位角等于arctan(y/x);X>0,Y<0在第二象限,方位角等于arctan(y/x)+90;X<0,Y<0在第三象限,方位角等于arctan(y/x)+180;X<0,Y>0在第四象限,方位角等于arctan(y/x)+270; 界面设计: 主要代码:计同一参考椭球下的三维地心坐标(笛卡儿坐标系)与大地坐标系转换的程序。 (提示:用 do…while 迭代,B、H 初始为 0 进行迭代,直到 H 的精度达到 米) 注意:东经 0~180(Y>0),西经:0~-180(Y<0)

式中,B、L、H 为椭球面上的大地纬度、大地经度、大地高;X、Y、Z 为空间直角坐标;N 为卯酉圈曲率半径,e 为椭球的偏心率,a 为椭球的长半径,b 为椭球的短半径。(WGS84 椭球参数:长半径 a=6378137m,扁率α=1/) 设计思路:在按钮下面设置主程序,按照指导书给的思路编辑公式 界面设计: 主要代码: 写一个后方交会计算程序。 基本原理及计算公式 若将 Pa、Pb、Pc 看成权,则 P 点的坐标即为三个已知点的加权平均值 计算程序设计步骤 (1)设计界面,用于输入 3 个已知点的坐标和三个观测角、和,以及用于输出待定点坐标的文本框(12 个)、静态标签框和 Button 按钮; (2)定义文本框控件变量(Value); (3)根据已知点计算三个内角 A、B、C; (4)计算 Tan(α)、Tan(β)、Tan(γ)、Tan(A)、Tan(B)、Tan(C); (5)计算 Pa、Pb、Pc; (6)计算待定点坐标 Xp、Yp。 界面要求: 三个坐标输入框,两个角度输入框 一个坐标结果输出框 一个计算按钮,一个清除按钮,一个退出按钮。

回溯法实验(n皇后问题)

算法分析与设计实验报告第六次实验

附录: 完整代码(回溯法) //回溯算法递归回溯n皇后问题#include #include #include #include"math.h" using namespace std; class Queen

{ friend int nQueen(int); //定义友元函数,可以访问私有数据 private: bool Place(int k); //判断该位置是否可用的函数 void Backtrack(int t); //定义回溯函数 int n; //皇后个数 int *x; //当前解 long sum; //当前已找到的可行方案数 }; int main() { int m,n; for(int i=1;i<=1;i++) { cout<<"请输入皇后的个数:"; //输入皇后个数 cin>>n; cout<<"皇后问题的解为:"<

微机原理实验四实验报告

实验报告

实验四 8251可编程串行口与PC机通信实验一、实验要求 利用实验箱内的8251A芯片,实现与PC机的通信。 二、实验目的 1.掌握8251A芯片结构和编程方法; 2.了解实现串行通信的硬件环境,数据格式和数据交换协议; 3.了解PC机通信的基本要求。 三、实验原理 (一)8251A芯片工作方式配置: 1. 8个数据位; 2.无奇偶校验位; 3.1个停止位; 4.波特率因子设为16; 5. 波特率设为9600。 (二)8251A主要寄存器说明 图4-1 模式字 图4-2 命令字

CO MMAN D I NSTR UCT ION FO RMA T 图4-3 状态字 (三)8251编程 对8251 的编程就是对8251 的寄存器的操作,下面分别给出8251 的几个寄存器的格式。(1)方式控制字 方式控制字用来指定通信方式及其方式下的数据格式,具体各位的定义如图4-4所示。 图4-4 方式控制字说明 (2)命令控制字 命令控制字用于指定8251 进行某种操作(如发送、接收、内部复位和检测同步字符等)或处于某种工作状态,以便接收或发送数据。图4-5 所示的是8251 命令控制字各位的定义。 图4-5命令控制字说明 (3)状态字 CPU 通过状态字来了解8251 当前的工作状态,以决定下一步的操作,8251 的状态字如 图4-6所示。 图4-6 状态字说明 四、实验电路连接: 1.CS8251接228H,CS8279已固定接至238H; 2.扩展通信口18中的232RXD连8251RXD ,232TXD连8251TXD;

3.计算机的两个RS232通信口,一个连至仿真机通信口,一个连至扩展通信口18(所有通信口均为DB9)。注意:RS232通信口必须在设备断电状态下插拔! 图4-7 连线图 五、实验内容及要求 1. 将例程从PDF文档中导入到WMD86软件编辑环境中,调试通过。使用软件自带的示波器,观察Txd管脚的输出,验证结果的正确性。将结果截图保存,贴入实验报告。 2.剔除例程中冗余部分,实现对例程的精简和优化。将精简内容与相应理由写入实验报告。 3.将自己学号的后三位数字通过RS232端口的Txd管脚输出。使用软件自带的示波器,观察Txd管脚的输出,验证结果的正确性。将结果截图保存,贴入实验报告。 4.通过读状态寄存器的方法,获得发送移位寄存器是否为空的信息,实现学号后三位数字的循环发送。将结果截图保存,贴入实验报告。 5.给每帧数据间添加固定的时间间隔,时间间隔为10000个指令周期。将结果截图保存,

实验报告四综述

成都信息工程大学遥感图像处理上机报告

1. 实验项目名称 遥感图像光谱增强处理 2. 实验目的 主成分分析:为了去除波段之间多余信息、将多波段的图像信息压缩到比原波段更有效的少数几个转换波段。 主成分逆变换:将主成分变换的图像重新恢复到RGB 彩色空间。缨帽变换:根据多光谱遥感中土壤、植被等信息在多维光谱空间中信息分布结构对图像 做的经验性线性正交变换。图像融合:将多源信道所采集到的关于同一目标的图像数据经过图像处理和计算机技术 等,最大限度的提取各自信道中的有利信息,最后综合成高质量的图像,以提高图像信息的利用率、改善计算机解译精度和可靠性、提升原始图像的空间分辨率和光谱分辨率,利于监测。 3. 实验原理 主成分分析法是一种降维的统计方法,它借助于一个正交变换,将其分量相关的原随机向量转化成其分量不相关的新随机向量,这在代数上表现为将原随机向量的协方差阵变换成对角形阵,在几何上表现为将原坐标系变换成新的正交坐标系,使之指向样本点散布最开的p 个正交方向,然后对多维变量系统进行降维处理,使之能以一个较高的精度转换成低维变量系统,再通过构造适当的价值函数,进一步把低维系统转化成一维系统。 缨帽变换又称KT 变换。是一种经验性的多波段图像的线性变换,是Kauth 和Thomas(1976) 在研究MSS 图像反映农作物和植被的生长过程时提出的。在研究过程中他们发现MSS 四个波段组成的四维空间中,植被的光谱数据点呈规律性分布,像缨帽状,因此将这种变换命名为缨帽变换。 图像融合就是通过一种特定算法将两幅或多幅图像合成为一幅新图像。该技术有基本的体系,主要包括的内容有:图像预处理,图像融合算法,图像融合评价,融合结果。图像融合系统的层次划分为:像素层融合、特征层融合、决策层融合,目前绝大多数融合算法研究都集中在这一层次上。 4. 数据来源

测记法 野外数据采集及制图实验报告

数字测图实验报告 班级2013012班 专业地理信息科学 组别第六组 组员王宁 华北水利水电大学资源与环境学院地理信息科学教研室

野外数据采集及制图 [实验名称] 测记法野外数据采集及制图 [实验目的] 掌握用全站仪的程序进行碎部点数据采集,并利用内存记录数据的方法,掌握全站仪和计算机之间进行数据传输的方法,并学会画草图,学会用CASS软件把草图展绘在计算机上。 [仪器和工具] 全站仪,脚架,棱镜杆,棱镜,钢卷尺 [实验原理] 测记法是在观测碎部点时,绘制工作草图,在工作草图记录地形要素名称、碎部点连接关系。然后在室内将碎部点显示在计算机屏幕上,根据工作草图,采用人机交互方式连接碎部点,输入图形信息码和生成图形的一种测量方法。 [实验步骤] 1.认识测区 进入测区后,领镜(尺)员首先对测站周围的地形、地物分布情况大概看一遍,认清方向,制作含主要地物、地貌的工作草图(若在原有的旧图上标明会更准确),便于观测时在草图上标明所测碎部点的位置及点号。 2.野外数据采集 用全站仪进行数据采集可采用三维坐标测量方式。测量时,应有一位

同学绘制草图。草图上须标注碎部点点号(与仪器中记录的点号对应)及属性。 (1)安置全站仪,对中整平,量取仪器高,检查中心连接螺旋是否旋紧。 (2)打开全站仪电源,并检查仪器是否正常。 (3)建立控制点坐标文件,并输入坐标数据。 (4)建立(打开)碎部点文件。 (5)设置测站,选择测站点点号或输入测站点坐标,输入仪器高并记录。 (6)定向和定向检查,选择已知后视点或后视方位进行定向,并选择其他已经点进行定向检查。 (7)碎部测量,测定各个碎部点的三维坐标并记录在全站仪内存中,记录时注意棱镜高、点号和编码的正确性。 (8)归零检查,每站测量一定数量的碎部点后,应进行归零检查,归零差不得大于1′。 (9)数据编码,测记法数据采集通常区分为有码作业和无码作业,有码作业需要现场输入野外操作码(如CASS7.0)。无码作业现场不输入数据编码,而用草图记录绘图信息,绘草图人员在镜站把所测点的属性及连接关系在草图上反映出来,以供内业处理、图形编辑时用。野外采集时,能测到的点要尽量测,实在测不到的点可利用皮尺或钢尺量距,将丈量结果记录在草图上,室内用交互编辑方法成图。(10)搬站,在一个测站上当所有的碎部点测完后,要找一个已知点

数据结构实验报告——栈(八皇后问题)

1.实验要求 【实验目的】 1、进一步掌握指针、模板类、异常处理的使用 2、掌握栈的操作的实现方法 3、掌握队列的操作的实现方法 4、学习使用栈解决实际问题的能力 5、学习使用队列解决实际问题的能力 【实验内容】 利用栈结构实现八皇后问题。 八皇后问题19世纪著名的数学家高斯于1850年提出的。他的问题是:在8*8的棋盘上放置8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列、同一斜线上。请设计算法打印所有可能的摆放方法。 提示: 1、可以使用递归或非递归两种方法实现 2、实现一个关键算法:判断任意两个皇后是否在同一行、同一列和同一斜线上2. 程序分析 2.1 存储结构 存储结构:栈(递归) 2.2 关键算法分析 【设计思想】 由于八皇后问题,可以分解成算法相同的子问题,所以使用递归的方法 【伪代码】 1、输入皇后个数n 2、k=1 3、判断k是否大于n 3.1 是:打印一组可能 3.2 否:循环行位置1~n 判断该位置是否符合要求,若符合记录q[k]的坐标y值 k+1 重复3 【关键算法】 1、递归 void Queen::Queens(int k,int n)

{ int i; if(k>n) { Print(n); count(); } else { for(i=1;i<=n;i++) if(Isavailable(i,k)) //判断该行中该位置放置‘皇后’是否符合要求 { q[k]=i; //记录改行中该点的位置 Queens(k+1,n); //放置下一行的‘皇后’ } } } 2、判断皇后放置位置是否符合要求 bool Queen::Isavailable(int i,int k) { int j; j=1; while(j

测量学实验三:使用南方CASS软件进行地形图的绘制

《测量学》 学生实验报告 开课学院资源与环境工程学院 开课班级2012级水土保持与荒漠化防治 实验项目名称使用南方CASS软件进行地形图的绘制 实验性质综合性实验 学生姓名××学生学号××××实验成绩

实验项目 名称 使用南方CASS软件进行地形图的绘制课程 名称测量学 实验 时间 2014年6月20日 下午14:00-16:00 实验 地点 安顺学院西校区 学生姓名×× 学生 学号×××× 指导 教师 ×× 实 验 目 的 通过实验,掌握使用南方CASS软件进行地形图绘制的方法和流程。实 验内容1.数据的导入 2.数据的处理 3.数据的输出 实验步骤一.数据的导入 软件打开页面如下图:

1.展高程点 单击【绘图处理】菜单--【展高程点】,在弹出“输入坐标数据文件名”对话框中,指定打开坐标数据文件打开路径。打开数据存放文件——在导出的数据窗口——用选择 菜单“工具”中“画直线”。“画直线”菜单命令有三个选项:“数段”“一段”“徒手画”绘制多线段(复合线)选择菜单“工具”中的“复合线”菜单命 令。或选择菜单“工具”中的“画弧”菜单;或样条曲线来将数据连接起来。2.展野外测站点点号 先移动鼠标至屏幕的顶部菜单“绘图处理”项按左键,这时系统弹出一个下拉菜单。再移动鼠标选择“绘图处理”下的“展野外测点点号”项,如下图所示 ,按左键后,输入对应的坐标数据文件名后,便可在屏 幕上展出野外测点的点号。 3. 简码识别 单击【绘图处理】--【简码识别】,弹出“输入简编码坐标数据文件名”对话框中,指定有简码坐标数据文件打开路径,单击【打开】按钮后,CASS自动完成地物的绘制,如下图所示。

n皇后问题实验报告

N后问题算法 一、实验目的及要求 所要涉及或掌握的知识: 1. 了解皇后相互攻击的条件:如果任意两个皇后在同一行,同一列或同一对角线,则她们相互攻击。 2. 运用迭代的方法实现6皇后问题,求解得到皇后不相互攻击的一个解 3. 在运用迭代的方法实现编程时,要注意回溯点 二、问题描述及实验内容 对6皇后问题求解,用数组c[1…6]来存皇后的位置。c[i]=j表示第i个皇后放在第j列。 最后程序运行的结果是c[1…6]={1,5,8,6,3,7 } 三、问题分析和算法描述 6-QUEENS的算法表示: 输入:空。 输出:对应于6皇后问题的解的向量c[1…6]={1,5,8,6,3,7} 1. for k=1 to 6 2. c[k]=0 //没有放皇后 3. end for 4. flag=false 5. k=1 6. while k>=1 7.while c[k]<=5 8.c[k]=c[k]+1

9.if c为合法着色 then set flag=ture 且从两个while循环退出 10.else if c是部分解 then k=k+1 11.end while 12. c[k]=0 //回溯并c[k]=0 13. k=k-1 14. end while 15. if flag then output c 16. else output “no solution” 四、具体实现 # include #include #include #include #include "iostream" using namespace std; int total = 0; //方案计数 void backtrace(int queen[],int N) { int i, j, k; cout<<"★为皇后放置位置\n"; for (i=1;;) { //首先安放第1行 if(queen[i]

实验报告电子版实验四

信息学院 学号:104100184 姓名:鲁庆斯班级:10C 班 课程名称:数字逻辑与数字系统实验名称:加法器、比较器与数据选择器 实验性质:①综合性实验②设计性实验③验证性实验 实验时间:年月日实验地点:同析楼3栋数字电子实验室 本实验所用设备: 1、数字电路实验台1台 2、集成电路芯片 74LS283(四位加法器) 1片 74LS85(四位比较器) 1片 74LS151(8选1数据选择器) 1片 自选芯片若干 实验报告:(包括:目的、方法、原理、结果或实验小结等。) 一、实验目的 1、掌握多位加法器、多位比较器、数据选择器的逻辑功能; 2、掌握基于MSI组合功能件的组合逻辑电路设计方法。 二、实验内容 1、加法器、比较器、数据选择器功能测试; 2、应用电路设计。 三、实验步骤 1、完成四位加法器74LS283的逻辑功能测试; (1)下图是74LS283的引脚图和功能示意图。 (2)下图和下表是74LS283功能测试图和数据记录表。 用开关按表设置输入 4 A- 1 A、 4 B- 1 B、 C的状态,借助指示灯观测输出 4 F- 1 F、 4 C状态,并记录下表中。 输入输出 4 A 3 A 2 A 1 A 4 B 3 B 2 B 1 B C 4 F 3 F 2 F 1 F 4 C 0 0 0 1 0 1 0 0 1 0 0 0 1 0 0 1 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 1 0 0 0 1 0 0 1 1 0 1 1 1 1 0 0 0 0 1 0 1 0 1 1 0 0 1 0 0 1 1 1 1 1 1 1 1

实验报告四个

实验一 实验名称信息系统模拟实验 实验日期 2012年2月23日 ?系统业务背景分析 某高校是我国华东地区一所普通高等院校,在校生20000人,有55个本科专业,每学期参加补考的学生约有5000人次。在该学校中,与补考业务相关的部门有:教务处的教务科和教室管理科,二级学院的办公室和各学科、学籍管理科。教务科负责组织补考业务的开展;补考所用的教室资源由教室管理科负责管理;二级院系的办公室负责统计本院系补考学生的信息、给补考学生发放补考通知单、学生补考后统计补考成绩;各学科负责组织教师阅卷,填写补考成绩单。 现行补考工作是按如下工作流程进行的: (1)每学期考试结束后,各二级学院的办公室根据教师报送的学生成绩报告单,登记本学院考试不及格的学生信息,填写补考学生明细表,报教务处教务科。 (2)教务科收集各个二级学院的统计表,汇总成全校的补考学生明细表。然后根据教室管理科提供的教室资源的信息安排补考的时间、地点,编制考场安排明细表。把补考学生明细表和补考安排明细表发给二级学院办公室。二级学院办公室收到教务处下发的表格后,为每个补考学生编制补考通知单,发给每个补考学生。 (3)补考结束后,各学科教师阅卷,填写补考成绩通知单。院系办公室统计补考不及格学生,编制补考不及格学生明细表,报教务科。教务科汇总全校补考不及格学生信息,提供给学籍管理科。 该校学生人数多,专业数目也较多,集中管理信息的确存在着困难。而且这个高校位于华东地区,信息技术相对来说较发达,所以适宜做信息系统的运用,以提高学校的运行效率。 ?现行系统组织结构分析 现行的补考业务管理信息系统中,其管理者应当是教务处。其辅助执行者是各学院的一些职能部门。教务处根据了学籍管理条例,要求学院对不及格的学生进行管理。所以,学籍管理部门负责了这个方面的学籍管理工作。然后教务科作为执行者,还需要教室管理的协作与配合。教室管理科是否合理地分配了教室对于补考工作的成败来说也是一个关键点。 接着,教务处需要将任务落实给学院的各个部门。学院的学科教师需要监考和考后批改试卷,并登记成绩。办公室根据教师报送的学生成绩报告单,登记本学院考试不及格的学生信息,填写补考学生明细表,报教务处教务科。所以学院需要分列这“学科”与“办公室”两个部门对学生补考工作进行具体的落实。

Cass软件上机实验报告

学院:市政与测绘工程学院专业:测绘工程 班级:1002601 姓名:翟彬彬 学号:1002601-04 实验时间:2011年10月 实验地点:湖南城市学院 指导老师:王平

目录 实验一、点号定位 (3) 实验二、测制地形图 (7) 实验三、测制地籍图 (13) 实验四、用南方CASS软件进行数字化 (21) 实验五、CASS在工程中的应用 (25)

CASS软件上机实验报告 实验一、点号定位 班级:1002601 姓名:翟彬彬学号:1002601-04 一、实验目的 1、了解CASS数字化地形地籍成图软件集成环境界面和功能; 2、掌握地形图的基本作图方法,熟悉CASS常用的操作命令。 3、学习如何做一幅简单的地形图。 二、实验原理 根据输入坐标数据文件的数据大小定义屏幕显示区域的大小,以保证所有点可见,然后再在所定区域内展点,再根据所展的点号及其属性画出相应的地物和地貌。 三、实验内容 演示地形图的成图过程,介绍点号定位的成图模型。 四、实验数据 在本次试验中,所用数据为测绘1002601班指定的“study.dat”数据文件。

五、实验步骤 1、定显示区 进入CASS主界面,鼠标单击“绘图处理”项,在出现的下拉菜单中选择定显示区,在出现的对话窗中输入坐标数据文件名,确定后命令区显示最小坐标(米):X=31056.221,Y=53097.691;最大坐标(米):X=31237.455,Y=53286.090。 2、选择测点点号定位成图法 移动鼠标至屏幕右侧菜单区之“测点点号”项,按左键,在出现的对话框中输入点号坐标数据文件名,命令区提示:读点完成!共读入106个点。 3、展点 先移动鼠标至屏幕的顶部菜单“绘图处理”项按左键,这时系统弹出一个下拉菜单。再移动鼠标选择“绘图处理”下的“展野外测点点号”项,按左键,出对话框,输入对应的坐标数据名后,便可在屏幕上展出野外测点的点号。 4、绘平面图 按照具体方法绘制要求得到的平面图,最后得到成果。如绘制平行等外公路时,选择右侧屏幕菜单的“交通设施/公路”按钮,在弹出的界面中找到“平行等外公路”并选中,再点击“OK”,命令区提示:绘图比例尺1:输入500,回车;点P/<点号>:输入92,回车;点P/<点号>:输入45,回车;点P/<点号>:输入46,回车;点P/<点号>:输入13,回车;点P/<点号>:输入47,回车;点P/<

八皇后实验报告

实验项目: 八皇后问题 1.实验目的: 通过求解皇后问题,熟悉深度优先搜索法DFS(回溯法(Backtracking Algorithms)技术。 2.实验内容: 由n2 个方块排成n行n列的正方形称为n元棋盘。如果两个皇后位于n元棋盘上的同一行、同一列或同一对角线上,则称它们在互相攻击。现要找出使棋盘上n个皇后互不攻击的布局。编制程序解决上述问题,以n=6运行程序,输出结果。 3.程序简介: 将n个皇后放到一个n*n的方阵中,要求每个皇后不在同一行同一列及同一对角线,我的程序是先把每个皇后放在了第零列,然后再按行检查,不符合要求继续下一列,若已经到这一行的最后一列,还没找到符合要求的位置,则回到上一行。 4.算法设计介绍: 定义一个一维数组,数组的下标是皇后所在位置的行数,数组存的值是皇后所在位置的列数,现将A[0]-A[n-1]都赋成零,然后随着检查的进行,皇后的位置也在不断地变化,最后找到一个符合要求的方阵时,本质上就是一个存放整数的一维数组,数组的下标是行数,存放的值是列数。 5.困难及解答 我很久以前就听说过八皇后问题,没想到现在轮到自己编了,一开始还真是特别糊涂呢,后来老师上课把算法大概讲了一遍,就清楚很多了,要说问题,就是一开始纠结怎么存放皇后,我开始想用二维数组着,后来老师说用一

维数组比较好做,我看了一下老师的算法,就明白了大概,经过一段时间就编出来了 5.心得 我编程变得还是很少,天天下决心说以后多编,也没践行,心想着吧,不挂在嘴上了,努力! 6.程序清单 /* //我真诚地保证: //我独立完成了整个程序从分析、设计到编码的所有工作。 //如果在上述过程中,我遇到了什么困难而求教于人,那么,我将在程序实习报告中 //详细地列举我所遇到的问题,以及别人给我的提示。 //我的程序里中凡是引用到其他程序或文档之处, //例如教材、课堂笔记、网上的源代码以及其他参考书上的代码段, //我都已经在程序的注释里很清楚地注明了引用的出处。 //我从未没抄袭过别人的程序,也没有盗用别人的程序,//不管是修改式的抄袭还是原封不动的抄袭。//我编写这个程序,从来没有想过要去破坏或妨碍其他计算机系统的正常运转 文件名称: 创建者: 创建时间: 2011.4.14

AI实验四实验报告课件

实验四博弈搜索 (3 学时) 班级:计科041 班姓名:陆宇海学号:0407100232 一实验目的 熟悉和掌握博弈(对抗)搜索基本思想和实现关键技术,使用Python 语言实现通用的极大极小算法与Alpha-Beta剪枝算法,并进行实验验证。 二实验原理 博弈是人工智能取得巨大成功的领域,著名的有深蓝系统等。所有的计算机博弈程序(或系统)的基础 Alpha-Beta剪枝算法,即在极大极小算法基础再进行剪枝。熟练掌握该两种算法,能够解决博弈领域的大部分问题(当然可能需要大型数据库的支撑)。 三实验条件 1 Python解释器,及IDLE等程序开发调试环境。 2 本实验所提供的几个Python文件,请解压文件gameproject.rar. 四实验内容 1 MiniMax算法实现 2 AlphaBeta剪枝算法实现 3 应用于一字棋游戏(TicTacToe,) 进行算法测试 4 应用于抓三堆游戏(Nim),进行算法测试 五实验步骤 1 一字棋游戏的搜索问题形式化 import tictactoe

你先试着和一字棋随机Agent(它只会随机乱走,碰运气)对弈一局 import games import gameagents games.runGame(initialTTTState, {"X" : gameagents.HumanGameAgent(), "O" : gameagents.RandomGameAgent()}, False, False) #输出结果为: ------------- 2 | | | | ------------- 1 | | | | ------------- 0 | | | | ------------- 0 1 2 Your move? 0,0 Opponent's move was (1, 1) ------------- 2 | | | | ------------- 1 | | O | | ------------- 0 | X | | | ------------- 0 1 2 Your move? 0,1 Opponent's move was (2, 0) -------------

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