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

N皇后问题实验报告

N皇后问题实验报告
N皇后问题实验报告

一、实验内容

在n×n格的棋盘上放置彼此不受攻击的n个皇后,按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子,求解可以放置的方法种数。

二、问题分析

n后问题等于于在n×n格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。即规定每一列放一个皇后,不会造成列上的冲突;当第i行被某个皇后占领后,则同一行上的所有空格都不能再放皇后,要把以i为下标的标记置为被占领状态。

三、算法设计

1.解决冲突问题:

这个问题包括了行,列,两条对角线;

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

行:当第i行被某个皇后占领后,则同一行上的所有空格都不能再放皇后,要把以i为下标的标记置为被占领状态;

对角线:对角线有两个方向。在这我把这两条对角线称为:主对角线和从对角线。在同一对角线上的所有点(设下标为(i,j)),要么(i+j)是常数,要么(i-j)是常数。因此,当第i个皇后占领了第j列后,要同时把以(i+j)、(i-j)为下标的标记置为被占领状态。

2.算法设计

因为n皇后问题,从n大于11开始求解过程耗时就很长,所以定义x 数组的最大值MAXNUM=30;即最大可解决30皇后问题。

1)判断当前位置是否可放置皇后

皇后k在第k行第x[k]列时,x[i]==x[k] 时,两皇后在同一列上;abs(x[i]-x[k])==abs(i-k)时,两皇后在同一斜线上;两种情况两皇后都可相互攻击,返回false表示不符合条件。

bool Place(int k)

{

int i;

i=1;

while(i

{

if(x[i]==x[k]||abs(x[i]-x[k])==abs(i-k))

return false;

i=i+1;

}

return true;

2)输出当前解

void Print(int x[],int n)

{

num++;

printf("第%d\t种解法:(",num);

for(int i=1;i<=n;i++)

{

printf("%d,",x[i]);

if(i%n==0)printf(");\n");

}

3)回溯法搜索解空间

void NQueens(int n)

{

int k=1;

x[1]=0;

while(k>0)

{

x[k]+=1;

while(x[k]<=n&&!Place(k))

x[k]+=1;

if(x[k]<=n)

{

if(k==n)

Print(x,n);

else

{

k=k+1;

x[k]=0;

}

}

//回溯至上一行;

else

k--;

}

}

3.实验结果及分析

n皇后问题解的情况

4.实验程序

实验#include

#include

#define N 4 /* 定义棋盘大小*/

static int sum; /* 当前已找到解的个数*/

static int x[N];

int place(int k)

{

int j;

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

if (x[j] == x[k] || abs(j - k) == abs(x[j] - x[k]))

return 0;

return 1;

}

/* 打印棋局*/

void chessboard()

{

int i,j;

int site[N];

printf("第%d种解法:\n", ++ sum);

for (i = 0; i < N; i ++) {

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

if (j == x[i]) {printf("Q ");site[i]=j+1;}

else printf("* ");

printf("\n");

}

printf("A%d(",sum);

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

{

printf("%d,",site[i]);

}

printf(");");

printf("\n");

}

/* 回溯搜索解空间*/

void backtrack()

{

int k = 0;

x[0] = -1;

while (k >= 0) {

x[k] += 1; /* 向右移一列*/

/* 向右移至出最右列或可以放置皇后的列*/

while ((x[k] < N) && !(place(k))) x[k] += 1;

if (x[k] < N) /* 向右移未移出棋盘*/

if (k == N - 1) chessboard(); /* 已移至最后一行*/

else x[++ k] = -1; /* 向下移一行*/

else k --; /* 回溯到上一行*/

}

}

int main(void)

{

backtrack();

printf("%d皇后有%d个解:\n",N,sum);

return 0;

}

结果截图:

5.流程图

八年级下册物理实验报告单(供参考)

年级:八年级姓名:日期:3月6日 实验名称:用弹簧测力计测量力的大小 一、实验目的 1.练习使用弹簧测力计。 2.正确使用弹簧测力计测量力的大小。 二、实验仪器和器材(要求标明各仪器的规格型号) 弹簧测力计2个(规格相同),钩码2个,铁架台。 三、实验步骤或内容: 1.检查实验器材。 2.测量手的拉力。 3.测量钩码所受的重力。 4.测两个弹簧测力计相互作用的拉力。 5.整理器材。 五、实验记录与结论 1.弹簧测力计的量程 0-5N ,分度值 0.2N ,指针是否指零刻线是。 2.记录数据:

年级:八年级姓名:日期: 实验名称:探究重力的大小与质量的关系。 一、实验目的 探究重力的大小与质量的关系。 二、实验仪器和器材(要求标明各仪器的规格型号) 弹簧测力计,铁架台,相同的钩码5个(质量已知),铅笔, 刻度尺。 三、实验步骤或内容:要求步骤或内容简单明了 (1)检查器材:观察弹簧测力计的量程、分度值,指针是否指到 零刻度线。 (2)将弹簧测力计悬挂在支架上。 (3)将钩码逐个加挂在弹簧测力计上。 (4)将5次的测量结果记录在表格中。 (5)整理器材。 四、实验记录与结论 1.观察弹簧测力计的量程为 0-5N N,分度值为 0.2 N。 实验结论: 重力的大小跟物体的质量的关系是物体所受重力与物体质量成 正比。

年级:八年级姓名:日期: 实验名称:探究影响滑动摩擦力大小的因素 一、实验目的 探究压力的大小和接触面的粗糙程度对滑动摩擦力大小的影响。 二、实验仪器和器材(要求标明各仪器的规格型号) 木块,砝码,弹簧测力计,毛巾。 三、实验步骤或内容:要求步骤或内容简单明了 (1)检查器材:观察弹簧测力计的量程和分度值,指针是否指在零刻线处。(2)当木块在水平桌面上运动,测出压力F=G木块时木块受到的滑动摩擦力。(3)改变压力,将砝码放在木块上,测出木块压力F>G木块时木块受到的滑动摩擦力。 (4)改变接触面的粗糙程度,将毛巾平铺在水平桌面上,测出压力F=G木块时木块受到的滑动摩擦力。 (5)整理器材。 五、实验记录与结论 (1)弹簧测力计的量程为0-5N,分度值为0.2N。 (3)实验结论: 在接触面相同时,压力越大,滑动摩擦力越大;在压力相等的情况下,接触表面越粗糙,滑动摩擦力越大。

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

八年级(下)物理实验报告单

一练习使用弹簧测力计 班级姓名 实验目的:会正确使用弹簧测力计 实验器材:弹簧测力计一个,其余学生自备。 1.观察:弹簧测力计的量程是,分度值是。 2.检查:指针是否指在零刻度线上?指针是否与平板之间有摩擦? 3.感受: 用手拉测力计,使指针分别指在1N、3N、5N,感受一下1N、3N、5N的力的大小。 4.测量: (1)把笔袋挂在挂钩上,提起笔袋,笔袋对测力计的拉力,F= (2)把笔袋挂在挂钩上,在桌面上水平拖动笔袋,笔袋对测力计的拉力,F= (3)拉断一根头发,所需要的力,F= 5.使用弹簧测力计时: (1)如果所测量的力的大小超出测力计的量程,会 (2)如果没有认清分度值,会 (3)如果指针指在零刻度线的上方或下方就进行测量,会使测量值或

二探究重力的大小跟质量的关系 班级姓名 实验目的:正确使用弹簧测力计,正确记录实验数据,正确绘制数据图像,根据实验数据和图像总结出重力的大小跟质量的关系 实验器材:弹簧测力计一个,勾码一盒。 1.看勾码盒上的标注,每个勾码的质量是kg。 2.逐次增挂钩码个数,测出所受重力,并记录在下面的表格中。 3.在右图中,以质量为横坐标,重力为纵坐标, 描点并画出重力与质量的关系图像。 4.分析数据和图像,重力与质量的关系是 重力与质量的比值是(用g表示)。重力与质量的关系式用字母表示为: 5. 重力与质量的比值g=9.8N/kg,表示的物理意义是

三探究二力平衡的条件 班级姓名 实验目的:通过探究,知道作用在一个物体上的两个力满足什么条件时,才能平衡。 实验器材:长木板(两端有滑轮)一个,小车一个(两端有挂钩),钩码一盒,细绳两段。 1.小车保持平衡状态,是指小车处于状态或状态。 2.按右图所示装好器材 3. 两端挂上数量不相等的钩码,观察小车的运动状态。 4. 两端挂上数量相等的钩码,观察小车的运动状态。 5. 两端挂上数量相等的钩码,把小车在水平桌面上扭转一个角度后再放手,观察小车的运动状态。 把实验条件和观察到现象记录在下面的表格中 6.总结二力平衡的条件: 作用在同一个物体上的两个力,如果大小,方向,并且 ,这两个力就彼此平衡。这时物体就处于状态或状态。

算法实验 递归回溯解八皇后问题

深圳大学实验报告 课程名称:算法分析与复杂性理论 实验项目名称:八皇后问题 学院:计算机与软件学院 专业:软件工程 指导教师:杨烜 报告人:学号:班级:15级软工学术型实验时间:2015-12-08 实验报告提交时间:2015-12-09 教务部制

一.实验目的 1.掌握选回溯法设计思想。 2.掌握八皇后问题的回溯法解法。 二.实验步骤与结果 实验总体思路: 根据实验要求,通过switch选择八皇后求解模块以及测试数据模块操作,其中八皇后模块调用摆放皇后函数模块,摆放皇后模块中调用判断模块。测试数据模块主要调用判断模块进行判断,完成测试。用一维数组保存每行摆放皇后的位置,根据回溯法的思想递归讨论该行的列位置上能否放置皇后,由判断函数Judge()判断,若不能放置则检查该行下一个位置。相应结果和过程如下所示(代码和结果如下图所示)。 回溯法的实现及实验结果: 1、判断函数 代码1: procedure BTrack_Queen(n) //如果一个皇后能放在第K行和X(k)列,则返回true,否则返回false。 global X(1:k);integer i,k i←1 while i0 do X(k)←X(k)+1 //移到下一个位置 while X(k)<=n and not Judge(k) do //判断能否放置皇后 X(k)←X(k)+1 repeat if X(k)<=n //找到一个位置 then if k=n //是一个完整的解吗

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){

回溯法实验(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<<"皇后问题的解为:"<

数据结构实验报告利用栈结构实现八皇后问题

数据结构实验报告 实验名称:实验二——利用栈结构实现八皇后问题 学生姓名: 班级: 班内序号: 学号: 日期:2013年11月21日 1.实验要求 (1)实验目的 通过选择下面五个题目之一进行实现,掌握如下内容: 进一步掌握指针、模板类、异常处理的使用 掌握栈的操作的实现方法 掌握队列的操作的实现方法 学习使用栈解决实际问题的能力 学习使用队列解决实际问题的能力 (2)实验内容 利用栈结构实现八皇后问题。 八皇后问题19世纪著名的数学家高斯于1850年提出的。他的问题是:在8*8的棋盘上放置8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列、同一斜线上。请设计算法打印所有可能的摆放方法。 ①可以使用递归或非递归两种方法实现 ②实现一个关键算法:判断任意两个皇后是否在同一行、同一列和同一斜线。 (3)代码要求 ①必须要有异常处理,比如删除空链表时需要抛出异常; ②保持良好的编程的风格: 代码段与段之间要有空行和缩近 标识符名称应该与其代表的意义一致 函数名之前应该添加注释说明该函数的功能 关键代码应说明其功能 ③递归程序注意调用的过程,防止栈溢出 2. 程序分析 2.1 存储结构 栈(递归):

2.2 关键算法分析 (1)递归 void SeqStack::PlaceQueen(int row) //在栈顶放置符合条件的值的操作,即摆放皇后{ for (int col=0;col::Judgement() { for(int i=0;i

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

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

八年级下册物理实验报告单(供参考)

初中物理实验报告单 年级:八年级姓名:日期:3月6日 实验名称:用弹簧测力计测量力的大小 一、实验目的 1.练习使用弹簧测力计。 2.正确使用弹簧测力计测量力的大小。 二、实验仪器和器材(要求标明各仪器的规格型号) 弹簧测力计2个(规格相同),钩码2个,铁架台。 三、实验步骤或内容: 1.检查实验器材。 2.测量手的拉力。 3.测量钩码所受的重力。 4.测两个弹簧测力计相互作用的拉力。 5.整理器材。 五、实验记录与结论 1.弹簧测力计的量程 0-5N ,分度值 0.2N ,指针是否指零刻线是。 2.记录数据: 初中物理实验报告单 年级:八年级姓名:日期: 实验名称:探究重力的大小与质量的关系。 一、实验目的 探究重力的大小与质量的关系。

二、实验仪器和器材(要求标明各仪器的规格型号) 弹簧测力计,铁架台,相同的钩码5个(质量已知),铅笔, 刻度尺。 三、实验步骤或内容:要求步骤或内容简单明了 (1)检查器材:观察弹簧测力计的量程、分度值,指针是否指到 零刻度线。 (2)将弹簧测力计悬挂在支架上。 (3)将钩码逐个加挂在弹簧测力计上。 (4)将5次的测量结果记录在表格中。 (5)整理器材。 四、实验记录与结论 1.观察弹簧测力计的量程为 0-5N N,分度值为 0.2 实验结论: 重力的大小跟物体的质量的关系是物体所受重力与物体质量成 正比。 初中物理实验报告单 年级:八年级姓名:日期: 实验名称:探究影响滑动摩擦力大小的因素 一、实验目的 探究压力的大小和接触面的粗糙程度对滑动摩擦力大小的影响。 二、实验仪器和器材(要求标明各仪器的规格型号) 木块,砝码,弹簧测力计,毛巾。

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]

八皇后实验报告

实验项目: 八皇后问题 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

n皇后问题实验报告

算 法 分 析 与 设 计 报 告 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]

2014-2015八年级(下)物理实验报告单

庆坪中学探究实验报告单 八年级物理(下) 一练习使用弹簧测力计 班级姓名 实验目的:会正确使用弹簧测力计 实验器材:弹簧测力计一个,其余学生自备。 1.观察:弹簧测力计的量程是5N ,分度值是0.2N 。 2.检查:指针是否指在零刻度线上?指针是否与平板之间有摩擦? 3.感受: 用手拉测力计,使指针分别指在1N、3N、5N,感受一下1N、3N、5N的力的大小。 4.测量: (1)把笔袋挂在挂钩上,提起笔袋,笔袋对测力计的拉力,F= 4N (2)把笔袋挂在挂钩上,在桌面上水平拖动笔袋,笔袋对测力计的拉力,F=1.5N (3)拉断一根头发,所需要的力,F= 5.使用弹簧测力计时: (1)如果所测量的力的大小超出测力计的量程,会损坏弹簧秤 (2)如果没有认清分度值,会出现读数错误 (3)如果指针指在零刻度线的上方或下方就进行测量,会使测量值偏大或偏小

庆坪中学探究实验报告单 八年级物理(下) 二探究重力的大小跟质量的关系 班级姓名 实验目的:正确使用弹簧测力计,正确记录实验数据,正确绘制数据图像,根据实验数据和图像总结出重力的大小跟质量的关系 实验器材:弹簧测力计一个,勾码一盒。 1.看勾码盒上的标注,每个勾码的质量是0.05 kg。 2.逐次增挂钩码个数,测出所受重力,并记录在下面的表格中。 实验次数一个钩 码两个钩 码 三个钩 码 四个钩 码 五个钩 码 六个 钩码 质量m/kg 0.05 0.10 0.15 0.20 0.25 0.30 重力G/N 0.49 0.98 1.47 1.98 2.45 2.94 重力与质量之比9.8 9.8 9.8 9.8 9.8 9.8 3.在右图中,以质量为横坐标,重力为纵坐标, 描点并画出重力与质量的关系图像。 4.分析数据和图像,重力与质量的关系是 成正比关系 重力与质量的比值是9.8 (用g表示)。 重力与质量的关系式用字母表示为:G =mg 5. 重力与质量的比值g=9.8N/kg,表示的物

算法设计与分析实验报告—八皇后问题

算法设计与分析 实验报告 —八皇后问题 - 姓名:崔明鑫 学号:08208012 班级:软件83

【问题描述】 在国际象棋盘上放八个皇后,要求任一皇后吃不到别人,也不受其他皇后的攻击,求出问题的所有解。 【问题分析&算法设计】 用8元组x[1: n]表示8后问题。其中x[ i]表示皇后i放在棋盘的第i行的第x[ i]列。由于不允许将2个皇后放在一列,所以解向量中的x[ i]互不相同。2个皇后不能放在同一斜线上是问题的隐约束。故若2个皇后放置的位置分别是(i,j)和(k,l),且i – j = k – l或i + j = k + l,则说明这2个皇后处于同一斜线上。这两个方程分别等价于i – k = j – l和i – k = l – j。由此可知,只要|i - k| = |j - l|成立,就表明2个皇后位于同一条斜线上。问题的隐约束化成了显约束。用回溯法解决8皇后问题时,用完全8叉树表示解空间。 【算法实现】 #include "stdio.h" #include "math.h" #include "iostream.h" #define N 8 /* 定义棋盘大小*/ static int sum; /* 当前已找到解的个数*/ static int x[N]; /* 记录皇后的位置,x[i]表示皇后i放在棋盘的第i行的第x[i]列*/ /* 每找到一个解,打印当前棋盘状态*/ void Show() { sum++; cout << "第" << sum << "种情况:" << endl; cout << "坐标为:\t"; for(int k = 0; k < N; k++)

回溯法实验(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<<"皇后问题的解为:"<

实验报告:回溯法求解N皇后问题(Java实现)

实验报告 一、实验名称:回溯法求解N皇后问题(Java实现) 二、学习知识: 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并以此慢慢地扩大问题规模,迭代地逼近最终问题的解。这种迭代类似于穷举并且是试探性的,因为当目前的可能答案被测试出不可能可以获得最终解时,则撤销当前的这一步求解过程,回溯到上一步寻找其他求解路径。 为了能够撤销当前的求解过程,必须保存上一步以来的求解路径,这一点相当重要。 三、问题描述 N皇后问题:在一个 N * N 的国际象棋棋盘中,怎样放置 N 个皇后才能使 N 个皇后之间不会互相有威胁而共同存在于棋局中,即在 N * N 个格子的棋盘中没有任何两个皇后是在同一行、同一列、同一斜线上。 深度优先遍历的典型案例。 四、求解思路 1、求解思路:最容易想到的方法就是有序地从第 1 列的第 1 行开始,尝试放上一个皇后,然后再尝试第 2 列的第几行能够放上一个皇后,如果第 2 列也放置成功,那么就继续放置第 3 列,如果此时第 3 列没有一行可以放置一个皇后,说明目前为止的尝试是无效的(即不可能得到最终解),那么此时就应该回溯到上一步(即第 2 步),将上一步(第 2 步)所放置的皇后的位置再重新取走放在另一个符合要求的地方…如此尝试性地遍历加上回溯,就可以慢慢地逼近最终解了。 2、需要解决的问题:如何表示一个 N * N 方格棋盘能够更有效?怎样测试当前所走的试探路径是否符合要求?这两个问题都需要考虑到使用怎样的数据结构,使用恰当的数据结构有利于简化编程求解问题的难度。 3、我们使用以下的数据结构: int column[col] = row 表示第 col 列的第 row 行放置一个皇后 boolean rowExists[i] = true 表示第 i 行有皇后 boolean a[i] = true 表示右高左低的第 i 条斜线有皇后(按→↓顺序从1~ 2*N -1 依次编号) boolean b[i] = true 表示左高右低的第 i 条斜线有皇后(按→↑顺序从1~ 2*N -1 依次编号) 五、算法实现 对应这个数据结构的算法实现如下:

《实验报告册》八年级物理(下册)

一探究串联电路电压的规律 日期:年月日小组成员: 名师有话 我们已经探究过串联电路中电流的规律,那么串联电路中电压的规律又如何呢?是否同电流一样,处处相等呢? 探究准备 一、探究目标 1.通过探究实验,得出串联电路中电压的规律,学习科学探究的方法。 2.在实验过程中,训练连接电路的基本技能。 3.通过实验,训练正确识记、适用电压表的技能。 二、实验原理 在串联电路中,串联电路中的总电压等于各部分电路的电压。 三、实验器材及其使用 电压表1只、规格不同的小灯泡4只、电源、开关、导线若干。 电压表的使用规则: ①电压表要并联在电路中; ②电流要从"+"接线柱入,从"-"接线柱出流出; ③被测电压不要超过电压表的量程。 电压表读数: ①看清量程; ②看清分度值(一般而言,量程0~3V分度值为0.5A,0~3V分度值为0.1V); ③看清表针停留位置(一定从正面观察)。 探究过程 一、提出问题、猜想与假设 串联电路中各部分电路的电压与总电压有什么关系呢? 猜想一:串联电路中各部分电路的电压与总电压都相等。 猜想二:串联电路中各部分电路的电压之和与总电压相等。 二、实验电路图

实验电路图如图所示。 三、进行试验,记录数据 实验步骤 ①检查实验器材。 ②连接实物图,按照实验电路图连接串联电路。 ③用电压表测AB间的电压。 ④用同样的方法测BC、AC间的电压。 ⑤换上另外两个小灯泡重复以上实验步骤。 ⑥做好实验后,把器材整理好。 注意:在连接电路时,开关应处于断开状态。 观察记录 将实验中测量的数据填入下面表格中。 四、分析与论证 分析上表中的数据,你得出的结论是。 五、交流与合作 实验数据和结论与其他小组相比较,结果(填“不同”、“完全相同”、“基本一致”)。 如果不同,请分析原因:。 最终正确结论是:。 六、疑惑讨论

人工智能实验报告(八皇后)

《人工智能导论》上机实验 八皇后问题求解 班级:10011207 姓名:盛家铭 学号:2012302532

图搜索策略实验 八皇后问题求解 一、实验软件 codeblocks 环境 二、 实验目的 通过实验能对搜索策略有更深刻的理解 熟悉人工智能系统中的问题求解过程; 熟悉状态空间的盲目搜索和启发式搜索算法的应用; 熟悉对八数码问题的建模、求解及编程语言的应用。 三、 需要的知识 熟悉人工智能系统中的问题求解过程; 熟悉状态空间的盲目搜索和启发式搜索算法的应用; 熟悉对八数码问题的建模、求解及编程语言的应用。 四、 实验数据及步骤 1、实验内容 八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后。为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n 皇后摆放问题:这时棋盘的大小变为n ×n ,而皇后个数也变成n 。当且仅当 n = 1 或 n ≥ 4 时问题有解。 2、程序函数调用图 主函数 sesearch 递归调用 output canplace 判断能否放置皇后 输出最后结果

3、实验步骤 采用算法的基本原理,使用深度优先搜索算法,对各层次的各位置进行搜索。 定义一个一维数组a[8],其中a[i]的值表示第i行的皇后的位置。由于结果情况种类较多,所以特地在程序中运用文件输出,新建一个TXT文档用于存储结果,使得最后的结果都输出在TXT文件中。 4、实验源程序 用于输出最后结果 #include int n=1; FILE *fp; int canplace(int m,int i,int a[8]) {//m行,i列 int j=0; while(j

回溯算法解决N皇后问题实验及其代码

实验报告4 回溯算法 实验4 回溯算法解决N皇后问题 一、实验目的 1)掌握回溯算法的实现原理,生成树的建立以及限界函数的实现; 2)利用回溯算法解决N皇后问题; 二、实验内容 回溯算法解决N皇后问题。 三、算法设计 1)编写限界函数bool PLACE(int k,int x[]),用以确定在k列上能否放置皇后; 2)编写void NQUEENS(int n)函数用以摆放N个皇后; 3)编写主函数,控制输入的皇后数目; 4)改进和检验程序。 四、程序代码 //回溯算法解决N皇后问题的c++程序 #include #include using namespace std; int count=0; //皇后摆放的可能性 bool PLACE(int k,int x[]);//限界函数 void NQUEENS(int n);//摆放皇后 int main() { int queen; cout<<"先生(女士)请您输入皇后的总数,谢谢!:"<>queen; NQUEENS(queen); cout<<"所有可能均摆放完毕,谢谢操作"<

void NQUEENS(int n){ /*此过程使用回溯算法求出在一个n*n棋盘上放置n个皇后,使其即不同行,也不同列,也不在同一斜角线上*/ int k, *x=new int[n];//存放皇后所在的行与列 x[0]=0; k=0; while (k>=0&&k

数据结构与算法专题实验实验报告_八皇后_背包问题的求解_农夫过河

八皇后问题 1.问题描述 设在初始状态下在国际象棋的棋盘上没有任何棋子(这里的棋子指皇后棋子)。然后顺序在第1行,第2行……第8行上布放棋子。在每一行中共有8个可选择的位置,但在任一时刻棋盘的合法布局都必须满足3个限制条件(1)任意两个棋子不得放在同一行(2)任意两个棋子不得放在同一列上(3)任意棋子不得放在同一正斜线和反斜线上。 2.基本要求 编写求解并输出此问题的一个合法布局的程序。 3、实现提示: 在第i行布放棋子时,从第1列到第8列逐列考察。当在第i行第j列布放棋子时,需要考察布放棋子后在行方向、列方向、正斜线和反斜线方向上的布局状态是否合法,若该棋子布放合法,再递归求解在第i+1行布放棋子;若该棋子布放不合法,移去这个棋子,恢复布放该棋子前的状态,然后再试探在第i行第j+1列布放棋子。 4 程序代码 #include #include static char Queen[8][8]; static int a[8]; static int b[15]; static int c[15]; static int QueenNum=0;//记录总的棋盘状态数 void qu(int i);//参数i代表行

{ int Line,Column; //棋盘初始化,空格为*,放置皇后的地方为@ for(Line=0;Line<8;Line++) { a[Line]=0; //列标记初始化,表示无列冲突 for(Column=0;Column<8;Column++) Queen[Line][Column]='*'; } //主、从对角线标记初始化,表示没有冲突 for(Line=0;Line<15;Line++) b[Line]=c[Line]=0; qu(0); return 0; } void qu(int i) { int Column; for(Column=0;Column<8;Column++) { if(a[Column]==0&&b[i-Column+7]==0&&c[i+Column]==0) //如果无冲突 { Queen[i][Column]='Q'; //放皇后 a[Column]=1;//标记,下一次该列上不能放皇后 b[i-Column+7]=1;//标记,下一次该主对角线上不能放皇后 c[i+Column]=1;//标记,下一次该从对角线上不能放皇后 if(i<7) qu(i+1); //如果行还没有遍历完,进入下一行 else//否则输出

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