BX121028俞佳星算法设计与分析实验4

合集下载

算法设计与分析实验指导2014版

算法设计与分析实验指导2014版

算法分析设计与实验王 源二0一四年十月实验一:分治算法及其应用实验要求:掌握分治算法的原理.掌握递归算法及递归程序的设计.能用程序设计语言设计求解典型问题的算法实验题:1、棋盘覆盖问题:在一个2k ×2k 个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。

用图示的4种不同形态的L 型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L 型骨牌不得重叠覆盖。

2、最近对问题:设p 1=(x 1,y 1), p 2=(x 2,y 2), …, p n =(x 1,y 1),是平面上n 个点构成的集合S ,最近对问题就是找出集合S 中距离最近的点对。

3、(选作)最大子段和问题:给定由n 个整数(可能有负整数)组成的序列(a 1, a 2, …, a n ),最大子段和问题要求该序列形如 的最大值(1≤i ≤j ≤n ),当序列中所有整数均为负整数时,其最大子段和为0。

例如,序列(-20, 11, -4, 13, -5, -2)的最大子段和为 。

∑=ji k k a ∑==4220k k a实验要求:基本动态规划法的原理方法;能用程序设计语言实现求解背包问题的算法实验题:1、最长公共子序列问题:对给定序列X=(x1, x2,…, xm)和序列Z=(z1, z2,…, zk),Z是X的子序列当且仅当存在一个递增下标序列(i1, i2,…, ik),使得对于所有j=1, 2, …, k,有(1≤ij ≤m)。

给定两个序列X和Y,当序列Z既是X的子序列又是Y的子序列时,称Z是序列X 和Y的公共子序列最长公共子序列问题就是在序列X和Y中查找最长的公共子序列。

2、(选作)多段图的最短路径问题:设图G=(V, E)是一个带权有向图,如果把顶点集合V 划分成k个互不相交的子集Vi (2≤k≤n, 1≤i≤k),使得E中的任何一条边(u, v),必有u∈Vi,v∈Vi+m (1≤i≤k, 1<i+m≤k),则称图G为多段图,称s∈V1为源点,t∈Vk为终点。

算法设计与分析实验报告三篇

算法设计与分析实验报告三篇

算法设计与分析实验报告一实验名称统计数字问题评分实验日期2014 年11 月15 日指导教师姓名专业班级学号一.实验要求1、掌握算法的计算复杂性概念。

2、掌握算法渐近复杂性的数学表述。

3、掌握用C++语言描述算法的方法。

4.实现具体的编程与上机实验,验证算法的时间复杂性函数。

二.实验内容统计数字问题1、问题描述一本书的页码从自然数1 开始顺序编码直到自然数n。

书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。

例如,第6 页用数字6 表示,而不是06 或006 等。

数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1,2, (9)2、编程任务给定表示书的总页码的10 进制整数n (1≤n≤109) 。

编程计算书的全部页码中分别用到多少次数字0,1,2, (9)三.程序算法将页码数除以10,得到一个整数商和余数,商就代表页码数减余数外有多少个1—9作为个位数,余数代表有1—余数本身这么多个数作为剩余的个位数,此外,商还代表1—商本身这些数出现了10次,余数还代表剩余的没有计算的商的大小的数的个数。

把这些结果统计起来即可。

四.程序代码#include<iostream.h>int s[10]; //记录0~9出现的次数int a[10]; //a[i]记录n位数的规律void sum(int n,int l,int m){ if(m==1){int zero=1;for(int i=0;i<=l;i++) //去除前缀0{ s[0]-=zero;zero*=10;} }if(n<10){for(int i=0;i<=n;i++){ s[i]+=1; }return;}//位数为1位时,出现次数加1//位数大于1时的出现次数for(int t=1;t<=l;t++)//计算规律f(n)=n*10^(n-1){m=1;int i;for(i=1;i<t;i++)m=m*10;a[t]=t*m;}int zero=1;for(int i=0;i<l;i++){ zero*= 10;} //求出输入数为10的n次方int yushu=n%zero; //求出最高位以后的数int zuigao=n/zero; //求出最高位zuigaofor(i=0;i<zuigao;i++){ s[i]+=zero;} //求出0~zuigao-1位的数的出现次数for(i=0;i<10;i++){ s[i]+=zuigao*a[l];} //求出与余数位数相同的0~zuigao-1位中0~9出现的次数//如果余数是0,则程序可结束,不为0则补上所缺的0数,和最高位对应所缺的数if(yushu==0) //补上所缺的0数,并且最高位加1{ s[zuigao]++;s[0]+=l; }else{ i=0;while((zero/=10)>yushu){ i++; }s[0]+=i*(yushu+1);//补回因作模操作丢失的0s[zuigao]+=(yushu+1);//补回最高位丢失的数目sum(yushu,l-i-1,m+1);//处理余位数}}void main(){ int i,m,n,N,l;cout<<"输入数字要查询的数字:";cin>>N;cout<<'\n';n = N;for(i=0;n>=10;i++){ n/=10; } //求出N的位数n-1l=i;sum(N,l,1);for(i=0; i<10;i++){ cout<< "数字"<<i<<"出现了:"<<s[i]<<"次"<<'\n'; }}五.程序调试中的问题调试过程,页码出现报错。

算法设计与分析实验指导书

算法设计与分析实验指导书

算法设计与分析实验指导书. . .. . .算法设计与分析实验指导书东北大学软件学院2012年.. .专业. .目录算法设计与分析 (1)实验指导书 (1)前言 (3)实验要求 (4)实验1 分治法的应用(2学时) (5)1.实验目的 (5)2.实验类型 (5)3.预习要求 (5)4.实验基本要求 (5)5.实验基本步骤 (7)实验2动态规划(2学时) (9)1.实验目的 (9)2.实验类型 (9)3.预习要求 (9)4.实验基本要求 (9)5.实验基本步骤 (10)实验3 回溯法(4学时) (12)1.实验目的 (12)2.实验类型 (12)3.预习要求 (12)4.实验基本要求 (12)5.实验基本步骤 (13)前言《算法设计与分析》是一门面向设计,处于计算机科学与技术学科核心地位的教育课程。

通过对计算机算法系统的学习,使学生理解和掌握计算机算法的通用设计方法,培养对算法的计算复杂性正确分析的能力,为独立设计算法和对算法进行复杂性分析奠定基础。

要求掌握算法复杂度分析、分治法、动态规划法、贪心法、回溯法、分支限界法等算法的设计方法及其分析方法。

能将这些方法灵活的应用到相应的问题中,并且能够用C++实现所涉及的算法,并尽量做到低复杂度,高效率。

通过本课程的实验,使学生加深对课程容的理解,培养学生严密的思维能力,运用所学知识结合具体问题设计适用的算法的能力;培养学生良好的设计风格,激励学生创造新算法和改进旧算法的愿望和热情。

希望同学们能够充分利用实验条件,认真完成实验,从实验中得到应有的锻炼和培养。

希望同学们在使用本实验指导书及进行实验的过程中,能够帮助我们不断地发现问题,并提出建议,使《算法设计与分析》课程成为对大家有益的课程。

实验要求《算法设计与分析》课程实验的目的是为了使学生在课堂学习的同时,通过一系列的实验,使学生加深理解和更好地掌握《算法设计与分析》课程教学大纲要求的容。

在《算法设计与分析》的课程实验过程中,要求学生做到:(1)仔细观察调试程序过程中出现的各种问题,记录主要问题,做出必要说明和分析。

算法分析实验指导书(王红梅)

算法分析实验指导书(王红梅)

《算法设计与分析》实验指导书计算机科学与技术学院石少俭实验一分治法1、实验目的(1)掌握设计有效算法的分治策略。

(2)通过快速排序学习分治策略设计技巧2、实验要求(1)熟练掌握分治法的基本思想及其应用实现。

(2)理解所给出的算法,并对其加以改进。

3、分治法的介绍任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。

问题的规模越小,越容易直接求解,解题所需的计算时间也越少。

而当n较大时,问题就不那么容易处理了。

要想直接解决一个规模较大的问题,有时是相当困难的。

分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。

如果原问题可分割成k个子问题,1<k≤n ,且这些子问题都可解,并可利用这些子问题的解求出原问题的解,那么这种分治法就是可行的。

由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。

在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。

这自然导致递归过程的产生。

分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。

分治法的适用条件(1)该问题的规模缩小到一定的程度就可以容易地解决;(2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。

(3)利用该问题分解出的子问题的解可以合并为该问题的解;(4)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。

上述的第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的增加而增加;第二条特征是应用分治法的前提,它也是大多数问题可以满足的,此特征反映了递归思想的应用;第三条特征是关键,能否利用分治法完全取决于问题是否具有第三条特征,如果具备了第一条和第二条特征,而不具备第三条特征,则可以考虑贪心法或动态规划法。

第四条特征涉及到分治法的效率,如果各子问题是不独立的,则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然可用分治法,但一般用动态规划法较好。

《算法分析与设计》实验指导与报告书-2014-15春季

《算法分析与设计》实验指导与报告书-2014-15春季

常熟理工学院《算法分析与设计》实验指导与报告书__________学年第____学期专业:___________________________________ 学号:___________________________________ 姓名:___________________________________实验地点:___________________________________指导教师:____________刘在德_________计算机科学与工程学院2015.03.06实验目录实验1求最大公约数 0实验2斐波那契数列 (1)实验3 *最近对问题* (2)实验4 堆排序 (3)实验5霍纳法则和二进制幂 (3)实验6字符串匹配问题 (4)实验7 Warshall算法和Floyd算法 (5)实验8 最优二叉查找树 (6)实验9 *Huffman编码* (7)实验10 求解非线性方程 (8)实验11*投资问题* (9)注:(1)独立完成6个实验就可通过实验考核;(2)实验4和实验5为变治法应用,建议二选一;(3)实验7和实验8为动态规划法应用,建议二选一;(4)带*号的实验为选做实验,根据课时及学生实验完成情况机动安排。

实验1求最大公约数实验2斐波那契数列实验3 *最近对问题*实验4 堆排序实验5霍纳法则和二进制幂实验6字符串匹配问题实验7 Warshall算法和Floyd算法实验8 最优二叉查找树实验9 *Huffman编码*实验10 求解非线性方程实验11*投资问题*世上没有一件工作不辛苦,没有一处人事不复杂。

不要随意发脾气,谁都不欠你的。

实验四:A星算法求解迷宫问题实验

实验四:A星算法求解迷宫问题实验

实验四:A*算法求解迷宫问题实验一、实验目的熟悉和掌握启发式搜索的定义、估价函数和算法过程,并利用A*算法求解迷宫问题,理解求解流程和搜索顺序。

二、实验内容迷宫问题可以表述为:一个二维的网格,0表示点可走,1表示点不可以走,点用(x,y)表示,寻找从某一个给定的起始单元格出发,经由行相邻或列相邻的单元格(可以通过的),最终可以到达目标单元格的、所走过的单元格序列。

在任一个单元格中,都只能看到与它邻近的4个单元格(如果位于底边,则只有3个;位于4个角上,则只有2个是否能通过)。

A*算法是人工智能中的一种搜索算法,是一种启发式搜索算法,它不需遍历所有节点,只是利用包含问题启发式信息的评价函数对节点进行排序,使搜索方向朝着最有可能找到目标并产生最优解的方向。

它的独特之处是检查最短路径中每个可能的节点时引入了全局信息,对当前节点距终点的距离做出估计,并作为评价节点处于最短路线上的可能性的度量。

A*算法中引入了评估函数,评估函数为:f(n)=g(n)+h(n)其中:n是搜索中遇到的任意状态。

g(n)是从起始状态到n的代价。

h(n)是对n到目标状态代价的启发式估计。

即评估函数f ( n) 是从初始节点到达节点n 处已经付出的代价与节点n 到达目标节点的接近程度估价值的总和。

?这里我们定义n点到目标点的最小实际距离为h(n)*,A*算法要满足的条件为:h(n)<=h(n)*迷宫走的时候只能往上下左右走,每走一步,代价为1,这里我们采用的估价函数为当前节点到目标节点的曼哈顿距离,即:h(n)=| –|+ | –|这里end表示迷宫的目标点,n表示当前点,很明显这里h(n)<=h(n)*。

g(n)容易表示,即每走一步的代价是1,所以利用f(n)=g(n)+h(n)这种策略,我们可以不断地逼近目标点,从而找到问题的解。

时间复杂度:m行n列的迷宫矩阵实现算法的时间复杂度为O(m*n).实验结果:)$实验源码:#include <queue>#include <vector>$#include <iostream>using namespace std;int direc[4][2]={{0,1},{-1,0},{0,-1},{1,0}};enum Flag{SEAL,OPEN,UNVISITED&};typedef struct node{int _x,_y; oint!=NULL){delete _seal[i][j].point;}}?}for(i=0;i<=_len;++i){delete []_seal[i];delete []_maze[i];}delete []_seal;delete []_maze;}?void input(){cout<<"输入: 迷宫左边长,上边宽! 例如:30 20"<<endl;cin>>_len>>_wid;_seal=new Seal*[_len+1];_maze=new unsigned char*[_len+1];for(int i=0;i<=_len;++i){_seal[i]=new Seal[_wid+1];_maze[i]=new unsigned char[_wid+1];|}cout<<"从下一行开始输入迷宫信息:"<<endl;for( i=1;i<=_len;++i){for(int j=1;j<=_wid;++j){cin>>_maze[i][j];_seal[i][j].flag=UNVISITED;_seal[i][j].point=NULL;},}cout<<"输入起点坐标,目标点坐标,例如:1 1 30 20"<<endl;cin>>_sx>>_sy>>_ex>>_ey;if(_maze[_sx][_sy]=='1'||_maze[_ex][_ey]=='1'||bound(_sx,_sy)==fal se||bound(_ex,_ey)==false){cout<<"不可能存在这样的情况!"<<endl;return;}cout<<"调用A*算法打印结果如下:"<<endl;A();》}lag=OPEN;_seal[_sx][_sy].point=p_node;while(!()){p_node=();();int x=p_node->_x;int y=p_node->_y;。

《人工智能及其应用》实验指导书

《人工智能及其应用》实验指导书

《人工智能及其应用》实验指导书浙江工业大学计算机科学与技术学院—人工智能课程组2011年9月前言本实验是为了配合《人工智能及其应用》课程的理论学习而专门设置的。

本实验的目的是巩固和加强人工智能的基本原理和方法,并为今后进一步学习更高级课程和信息智能化技术的研究与系统开发奠定良好的基础。

全书共分为八个实验:1.产生式系统实验;2.模糊推理系统实验;3.A*算法求解8数码问题实验;4.A*算法求解迷宫问题实验;5.遗传算法求解函数最值问题实验;6.遗传算法求解TSP问题实验;7.基于神经网络的模式识别实验;8.基于神经网络的优化计算实验。

每个实验包括有:实验目的、实验内容、实验条件、实验要求、实验步骤和实验报告等六个项目。

本实验指导书包括两个部分。

第一个部分是介绍实验的教学大纲;第二部分是介绍八个实验的内容。

由于编者水平有限,本实验指导书的错误和不足在所难免,欢迎批评指正。

人工智能课程组2011年9月目录实验教学大纲 (1)实验一产生式系统实验 (3)实验二模糊推理系统实验 (5)实验三A*算法实验I (9)实验四A*算法实验II (12)实验五遗传算法实验I (14)实验六遗传算法实验II (18)实验七基于神经网络的模式识别实验 (20)实验八基于神经网络的优化计算实验 (24)实验教学大纲一、学时:16学时,一般安排在第9周至第16周。

二、主要仪器设备及运行环境:PC机、Visual C++ 6.0、Matlab 7.0。

三、实验项目及教学安排序号实验名称实验平台实验内容学时类型教学要求1 产生式系统应用VC++ 设计知识库,实现系统识别或分类等。

2 设计课内2 模糊推理系统应用Matlab 1)设计洗衣机的模糊控制器;2)设计两车追赶的模糊控制器。

2 验证课内3 A*算法应用I VC++ 设计与实现求解N数码问题的A*算法。

2 综合课内4 A*算法应用II VC++ 设计与实现求解迷宫问题的A*算法。

《算法设计与分析》课程实验与设计 福州大学 王晓东

《算法设计与分析》课程实验与设计 福州大学 王晓东

《算法设计与分析》课程实验与设计福州大学王晓东第1章算法引论算法实现题1-1 统计数字问题算法实现题1-2 字典序问题算法实现题1-3 最多约数问题算法实现题1-4 金币阵列问题算法实现题1-5 最大间隙问题第2章递归与分治策略算法实现题2-1 输油管道问题算法实现题2-2 众数问题算法实现题2-3 邮局选址问题算法实现题2-4 马的Hamilton周游路线问题算法实现题2-5 半数集问题算法实现题2-6 半数单集问题算法实现题2-7 士兵站队问题算法实现题2-8 有重复元素的排列问题算法实现题2-9 排列的字典序问题算法实现题2-10 集合划分问题算法实现题2-11 集合划分问题2算法实现题2-12 双色Hanoi塔问题算法实现题2-13 标准2维表问题算法实现题2-14 整数因子分解问题算法实现题2-15 有向直线2中值问题第3章动态规划算法实现题3-1 独立任务最优调度问题算法实现题3-2 最少硬币问题算法实现题3-3 序关系计数问题算法实现题3-4 多重幂计数问题算法实现题3-5 编辑距离问题算法实现题3-6 石子合并问题算法实现题3-7 数字三角形问题算法实现题3-8 乘法表问题算法实现题3-9 租用游艇问题算法实现题3-10 汽车加油行驶问题算法实现题3-11 圈乘运算问题算法实现题3-12 最少费用购物算法实现题3-13 最大长方体问题算法实现题3-14 正则表达式匹配问题算法实现题3-15 双调旅行售货员问题算法实现题3-16 最大k乘积问题算法实现题3-17 最小m段和问题算法实现题3-18 红黑树的红色内结点问题第4章贪心算法算法实现题4-1 会场安排问题算法实现题4-2 最优合并问题算法实现题4-3 磁带最优存储问题算法实现题4-4 磁盘文件最优存储问题算法实现题4-6 最优服务次序问题算法实现题4-7 多处最优服务次序问题算法实现题4-8 d森林问题算法实现题4-9 汽车加油问题算法实现题4-10 区间覆盖问题算法实现题4-11 硬币找钱问题算法实现题4-12 删数问题算法实现题4-13 数列极差问题算法实现题4-14 嵌套箱问题算法实现题4-15 套汇问题算法实现题4-16 信号增强装置问题算法实现题4-17 磁带最大利用率问题算法实现题4-18 非单位时间任务安排问题算法实现题4-19 多元Huffman编码问题算法实现题4-20 多元Huffman编码变形算法实现题4-21 区间相交问题算法实现题4-22 任务时间表问题第5章回溯法算法实现题5-1 子集和问题算法实现题5-2 最小长度电路板排列问题算法实现题5-3 最小重量机器设计问题算法实现题5-4 运动员最佳匹配问题算法实现题5-5 无分隔符字典问题算法实现题5-6 无和集问题算法实现题5-7 n色方柱问题算法实现题5-9 拉丁矩阵问题算法实现题5-10 排列宝石问题算法实现题5-11 重复拉丁矩阵问题算法实现题5-12 罗密欧与朱丽叶的迷宫问题算法实现题5-13 工作分配问题算法实现题5-14 独立钻石跳棋问题算法实现题5-15 智力拼图问题算法实现题5-16 布线问题算法实现题5-17 最佳调度问题算法实现题5-18 无优先级运算问题算法实现题5-19 世界名画陈列馆问题算法实现题5-20 世界名画陈列馆问题(不重复监视)算法实现题5-21 部落卫队问题算法实现题5-22 虫蚀算式问题算法实现题5-23 完备环序列问题算法实现题5-24 离散01串问题算法实现题5-25 喷漆机器人问题算法实现题5-26 n2-1谜问题第6章分支限界法算法实现题6-1 最小长度电路板排列问题算法实现题6-2 最小长度电路板排列问题算法实现题6-3 最小权顶点覆盖问题算法实现题6-4 无向图的最大割问题算法实现题6-5 最小重量机器设计问题算法实现题6-6 运动员最佳匹配问题算法实现题6-7 n皇后问题算法实现题6-8 圆排列问题算法实现题6-9 布线问题算法实现题6-10 最佳调度问题算法实现题6-11 无优先级运算问题算法实现题6-12 世界名画陈列馆问题算法实现题6-13 骑士征途问题算法实现题6-14 推箱子问题算法实现题6-15 图形变换问题算法实现题6-16 行列变换问题算法实现题6-17 重排n2宫问题算法实现题6-18 最长距离问题第7章概率算法算法实现题7-1 模平方根问题算法实现题7-2 素数测试问题算法实现题7-3 集合相等问题算法实现题7-4 逆矩阵问题算法实现题7-5 多项式乘积问题算法实现题7-6 皇后控制问题算法实现题7-7 3SAT问题算法实现题7-8 战车问题算法实现题7-9 圆排列问题算法实现题7-10 骑士控制问题算法实现题7-11 骑士对攻问题第9章近似算法算法实现题9-1旅行售货员问题的近似算法算法实现题9-2 可满足问题的近似算法算法实现题9-3 最大可满足问题的近似算法算法实现题9-4 子集和问题的近似算法算法实现题9-5 子集和问题的完全多项式时间近似算法算法实现题9-6 实现算法greedySetCover算法实现题9-7 装箱问题的近似算法First Fit算法实现题9-8 装箱问题的近似算法Best Fit算法实现题9-9 装箱问题的近似算法First Fit Decreasing 算法实现题9-10 装箱问题的近似算法Best Fit Decreasing 算法实现题9-11 装箱问题的近似算法Next Fit第10章算法优化策略算法实现题10-1 货物储运问题算法实现题10-2 石子合并问题算法实现题10-3 最大运输费用货物储运问题算法实现题10-4 五边形问题算法实现题10-5 区间图最短路问题算法实现题10-6 圆弧区间最短路问题算法实现题10-7 双机调度问题算法实现题10-8 离线最小值问题算法实现题10-9 最近公共祖先问题算法实现题10-10 达尔文芯片问题算法实现题10-11 多柱Hanoi塔问题算法实现题10-12 线性时间Huffman算法算法实现题10-13 单机调度问题算法实现题10-14 最大费用单机调度问题算法实现题10-15 飞机加油问题《算法设计与分析》期中试卷1 试题1 数列极差问题试题2 双调TSP回路问题试题3 最佳调度问题《算法设计与分析》期中试卷2 试题1 石子合并问题试题2 整数因子分解问题试题3 汽车加油问题《算法设计与分析》期终试卷1 试题1 乘法表问题试题2 工作分配问题试题3 飞行员配对方案问题《算法设计与分析》期终试卷2 试题1 直线k中值问题试题2 图形变换问题试题3 无向图的最大割问题。

算法设计与分析实验指导书

算法设计与分析实验指导书

<<算法设计与分析>>实验指导书实验一、回溯法一、实验目的掌握回溯法求解问题的思想,学会利用其原理求解相关问题。

二、实验内容及要求1、八皇后问题八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。

该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

高斯认为有76种方案。

1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。

要求对用C实现的回溯法进行验证,并使其能扩展到任意的皇后数的情况,同时对源程序给出详细的注释。

三、实验步骤1. 理解算法思想和问题要求;2. 编程实现题目要求;3. 上机输入和调试自己所编的程序;4. 验证分析实验结果;5. 整理出实验报告。

四、实验源代码1、八皇后问题(回溯法实现)#define QUEENNO 8#define MAXNO 32#include <stdio.h>#include <stdlib.h>int X[MAXNO];char D[MAXNO][MAXNO];int count=0;void initiate(int n);void nqueen(int n);void display(int n);main(){int queenno=QUEENNO;initiate(queenno);nqueen(queenno);printf("共有%d个解,解已经保存在D盘文件result.txt中\n",count); }void initiate(int n){int i;for(i=0;i<n;i++)X[i]=-1;return;}void nqueen(int n){ int k;X[0]=0;k=0;while(k>=0){X[k]++;while(X[k]<=n&&!place(k)){X[k]++;}if(X[k]<=n){ if(k==n-1) display(n);else {k++;X[k]=0;}}else{ k--;}}}int place(int k){int i;i=0;while(i<k){if((X[i]==X[k])||(abs(X[i]-X[k])==abs(i-k)))return 0;i++;}return 1;}void display(int n){FILE *fw;int i,j;count++;fw=fopen("D:\\result.txt","a");for(i=0;i<n;i++)for(j=0;j<n;j++)D[i][j]='o';for(i=0;i<n;i++)D[i][X[i]-1]='*';fprintf(fw,"%d\n",count);fprintf(fw,"-------------------------\n");for(i=0;i<n;i++)for(j=0;j<n;j++){if(j==n-1)fprintf(fw,"%c \n",D[i][j]);else fprintf(fw,"%c ",D[i][j]); }fprintf(fw,"-------------------------\n");fclose(fw);return;}实验二:分治法(2学时)问题陈述:对所给元素存储于数组中和存储于链表中两中情况,写出自然合并排序算法.解题思路:将待排序元素分成大小大相同的两个集合,分别对两个集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合.自然排序是通过一次扫描待排元素中自然排好序的子数组,再进行子数组的合并排序.程序代码:#include <iostream.h>const int N=100;void ScanTarget(int target[], int n, int head[], int tail[]);int CountHead(int head[]);void MergeSort(int a[], int head[], int tail[], int m);void MergePass(int x[], int y[], int s, int a[], int b[], int m);void Merge(int c[], int d[], int l, int m, int r);void main(){char a;do{int target[N],head[N],tail[N];int i=0,n,m;for(; i<N; i++){head[i]=-1;tail[i]=-1;}cout<<"请输入要排序的总数:"<<endl;cin>>n;cout<<"请输入要排序的数列:" <<endl;for(i=0; i<n; i++)cin>>target[i];ScanTarget(target,n,head,tail);m=CountHead(head);MergeSort(target,head,tail,m);cout<<"排序后:"<<endl;for(i=0; i<n; i++)cout<<target[i]<<" ";cout<<endl;cout<<"是否继续(y/n):"<<endl;cin>>a;}while(a!='n' && a!='N');}void ScanTarget(int target[], int n, int head[], int tail[])//扫描待排数组;{int i,j=0,k=0;head[k]=0;k++;for(i=1;i<n;i++){if(target[i-1]>target[i]){tail[j++]=i-1;head[k++]=i;}}tail[j]=n-1;}int CountHead(int head[])//求长度;{int i(0);while(head[i]!=-1){i++;}return i;}void MergeSort(int a[], int head[], int tail[], int m){int b[N];int s=1;while(s<m){MergePass(a,b,s,head,tail,m);s+=s;MergePass(b,a,s,head,tail,m);s+=s;}}void MergePass(int x[], int y[], int s, int a[], int b[], int m){int i=0;while(i <= m-2*s){Merge(x,y,a[i],b[i+s-1],b[i+2*s-1]);i=i+2*s;}if(i+s < m){Merge(x,y,a[i],b[i+s-1],b[m-1]);}else{for(int j=i; j<m; j++)for(int k=a[j]; k<=b[j]; k++)y[k]=x[k];}}void Merge(int c[], int d[], int l, int m, int r){int i,j,k;i=l;j=m+1;k=l;while((i<=m) && (j<=r)){if( c[i] <= c[j] )d[k++]=c[i++];else d[k++]=c[j++];}if( i>m ){for(int q=j; q<=r; q++)d[k++]=c[q];}else{for(int q=i; q<=m; q++)d[k++]=c[q];}}时间复杂度:通常情况下用自然合并排序所需要的合并次数较少。

BX121028俞佳星组成原理课设

BX121028俞佳星组成原理课设

计算机组成原理课程设计报告姓名:俞佳星班级:BX1210学号:28指导老师:闫俊英二〇一四年5月28日目录第一章课程设计任务概述 (3)1.1课设目的 (3)1.2 课设任务 (3)第二章题目解答 (5)2.1指令的执行流程 (5)2.1.1“异或”指令 (5)2.1.2 读取指令 (5)2.1.3 “ADD”指令 (6)2.2存储器 (7)2.3计算机运算器 (8)2.4运算器的组成及设计 (13)2.4.1运算器的组成 (13)2.4.2设计模型机综合实验 (14)第三章个人总结 (20)参考文献 (21)答辩记录 (22)第一章课程设计任务概述1.1课设目的通过一星期的实训,我们要完成五个题目的任务。

通过这段时间的掌握,主要学习计算机基本构造以及微观操作。

对指令的内部的执行与设计有一个初步的掌握。

对计算机组成原理有更为深刻的了解。

1.2 课设任务1参考给出的或者课本上的计算机的硬件(应有中断功能)组成,写出完成下面给定的指令格式的指令的执行流程;(1)累加器内容完成“异或”运算“异或”指令的指令格式(2)把一个内存单元中的内容读到所选择的一个累加器中。

给出指令执行流程(选做要求:(组号mod 5)+1=红色题目编号):IN(输入)、ADD(二进制加法)、STA(存数)、OUT(输出)、JMP(无条件转移),其指令格式如下:助记符机器指令码说明①IN 0000 0000 “I NPUT DEVICE”中的开关状态→R0②ADD addr 0001 0000 ×××× R0+[addr] →R0③STA addr 0010 0000 ×××× R0→ [addr]④OUT addr 0011 0000 ×××× [addr] →BUS⑤JMP addr 0100 0000 ×××× addr→PC注:本小组为第六组,故做题目2。

2021年算法设计与分析实验报告完整版

2021年算法设计与分析实验报告完整版

算法设计与分析试验汇报指导老师: 沙莎学院: 信息科学与工程学院班级: 计科0508姓名: 戚婕学号: 10完成日期: 12月目录试验一分治法 (2)1.1 试验要求 (2)1.2 试验内容 (2)1.3 关键算法 (2)1.4 程序代码 (4)1.5 试验结果 (8)试验二贪心法 (10)2.1 试验要求 (10)2.2 试验内容 (10)2.3 关键算法 (10)2.4 程序代码 (12)2.5 试验结果 (18)试验三动态计划 (20)3.1 试验要求 (20)3.2 试验内容 (20)3.3 关键算法 (20)3.4 程序代码 (21)3.5 试验结果 (24)试验四深度优先搜索 (26)4.1 试验要求 (26)4.2 试验内容 (26)4.3 关键算法 (26)4.4 程序代码 (27)4.5 试验结果 (28)试验五回溯法 (30)5.1 试验要求 (30)5.2 试验内容 (30)5.3 关键算法 (30)5.4 程序代码 (31)5.5 试验结果 (33)试验一分治法一.试验要求1.了解用分治法求解问题: 当要求解一个输入规模为n, 且n取值相当大问题时,假如问题能够分成k个不一样子集合, 得到k个不一样可独立求解子问题, 其中1<k≤n, 而且子问题与原问题性质相同, 原问题解可由这些子问题解合并得出。

那末, 对于这类问题分治法是十分有效。

2.掌握分治法通常控制步骤。

DanC(p,q)global n, A[1:n]; integer m,p,q; // 1≤p≤q≤nif Small(p,q) then return G(p,q);else m=Divide(p,q); // p≤m<qreturn Combine(DanC(p,m),DanC(m+1,q));endifend DanC3.实现经典分治算法编程与上机试验, 验证算法时间复杂性函数。

二.试验内容1.编程实现归并排序算法和快速排序算法, 程序中加入比较次数计数功效, 输出排序结果和比较次数。

BX121028俞佳星算法设计与分析实验7

BX121028俞佳星算法设计与分析实验7
2、给定一个字符串s和一个字符x,编写递归算法实现以下功能:
检查x是否在s中,计算x在s中出现的次数。
三、实验原理
一个递归定义包括两部分:基础情况和递归部分。
递归算法:是指直接或间接调用自身的算法。递归本质上也是一种循环的算法结构,它把较复杂的计算归结为较简单情形的计算,直至归结到最简单情形的计算,并最终得到计算结果为止。
right2Βιβλιοθήκη 11*i*k;right3=11*i*j;
if(left==right1+right2+right3){
printf("%d:\t3/11\t=\t1/%d\t+\t1/%d\t+\t1/%d\n",++id,i,j,k);
}
}
}
int i,j,k,id=0;
int left,right1,right2,right3;
printf("result:\n");
for(i=1;i<200;i++)
for(j=i+1;j<200;j++)
for(k=j+1;k<200;k++){
left=3*i*j*k;
right1=11*j*k;
四、实验设备
PC机
五、实验步骤
1、理解算法思想和问题要求;
2、编程实现题目要求;
3、上机输入和调试自己所编的程序;
4、验证分析实验结果;
六、实验结果
对算法运行结果,要进行截图,并分析结果,加深对算法的理解。
附:源程序
1:贪心算法构造埃及分数
#include<stdio.h>

《算法设计与分析》实验大纲

《算法设计与分析》实验大纲

《算法设计与分析》实验教学大纲实验学时:32 实验个数:7 实验学分:1课程性质:适用专业:计算机科学与技术、软件工程教材及参考书:1.《计算机算法设计与分析》,王晓东,北京:电子工业出版社,2005年2.《算法与数据结构》,傅清祥等著,北京:电子工业出版社,20033.《计算机算法导引—设计与分析》,卢开澄著,北京:清华大学出版社,2001 大纲执笔人:刘芳大纲审定人:郭涛一、实验课的性质与任务算法的设计与分析是计算机科学的核心问题之一,也是计算机科学与技术专业本科及研究生的一门重要的专业基础课,其内容是研究计算机领域及其有关领域中的一些非数值计算的常用算法。

课程将覆盖计算机软件实现中常用的、有代表性的算法,并具有一定的深度和广度,通过实验,使学生理解并掌握算法设计的基本技术,让学生具有针对所给的问题设计和实现高效算法的基本能力。

二、实验课程目的与要求计算机科学的一个核心问题是算法理论,本课程介绍非数值算法设计的策略与技术,同时介绍算法的复杂性的概念通过对一些代表性算法的使用达到了解掌握与运用的目的。

通过完成课程实验,使学生达到如下要求:1.熟悉各种基本常用算法的基本思想、适用范围,初步掌握算法分析的基本技巧以及如何根据实际问题设计一个有效的算法。

2.能对给定问题分析出恰当的数学模型,并设计出解决方案,将算法用高级语言(C,VC++等)编程实现。

三、实验内容安排:实验一算法设计基础(验证型、设计型实验4学时)1.实验目的(1)巩固程序设计语言基础知识,熟悉文件操作等。

(2)对给定问题,能设计算法并编程实现问题的求解,并分析算法的时间复杂性。

2.实验要求(1)认真填写实验报告,附加源代码(主要代码)和运行记录;(2)对设计好的算法,测试运行实验数据,检查输出是否正确。

并对算法的时间和空间复杂度进行分析。

3.实验内容:(1)统计数字问题(P8)#include "stdafx.h"#include <iostream>#include <conio.h>#include <string>using namespace std;void read_information(string &Data){//从文件中读出停车场信息,并且存放在数组中cout<<"正在读取数据......"<<endl;FILE *fp;char ch;if((fp=fopen("data.txt","rt+"))==NULL){printf("\nCannot open file strike any key exit!");getch();exit(1);}ch=fgetc(fp);while(ch!=EOF){Data = Data + ch;ch=fgetc(fp);}fclose(fp);cout<<"读取完成......"<<endl;}void save_information(string data){//把数组中的停车场信息存放回文件中cout<<"正在写入文件......"<<endl;FILE *fp;//定义文件流指针,用于打开写操作的文件char ch[2]="\0";//定义一个字符串数组,用于存储读取的字符int i=0;fp = fopen("answer.txt","w");//写方式打开文件a.txtwhile(i < data.length())//逐行读取fp1所指向文件中的内容到text中{ch[0] = data[i++];fputs(ch,fp);//将内容写到fp2所指向文件中}fclose(fp);//关闭文件b.txtcout<<"写入完成......"<<endl;}int main(int argc, char* argv[]){int Page;int Num[10] = {0,0,0,0,0,0,0,0,0,0};string Data;int jishu = 0;read_information(Data);Page = atoi(Data.c_str());cout<<"计算中.\n"<<jishu<<"%"<<endl;;for(int i=1; i<=Page; i++){char sz[10];itoa(i, sz, 10);for(int j=0; sz[j]!='\0'; j++){Num[sz[j]-48]++;}if((int)i/Page*100>jishu){jishu = i/Page*100;cout<<jishu<<"%"<<endl;}}cout<<endl;string answer = "";for (i=0; i<10; i++){char tmp[10];char sz[2];itoa(Num[i], tmp, 10);itoa(i, sz, 10);answer = answer + sz[0];answer = answer + ":";for(int j=0; j<10 && tmp[j]!='\0'; j++){answer = answer + tmp[j];}answer = answer + '\n';}save_information(answer);system("pause");return 0;}字典序问题(P8)(2)最多约数问题(P9)#include "stdafx.h"#include <iostream>#include <string>using namespace std;int yueshuNum(int x){int num = 0;for(int i=1; i<=x; i++){if(x%i == 0){num++;}}return num;}void read_information(string &Data){//从文件中读出停车场信息,并且存放在数组中cout<<"正在读取数据......"<<endl;FILE *fp;char ch;if((fp=fopen("data.txt","rt+"))==NULL){printf("\nCannot open file strike any key exit!");exit(1);}ch=fgetc(fp);while(ch!=EOF){Data = Data + ch;ch=fgetc(fp);}fclose(fp);cout<<"读取完成......"<<endl;}void save_information(string data){//把数组中的停车场信息存放回文件中cout<<"正在写入文件......"<<endl;FILE *fp;//定义文件流指针,用于打开写操作的文件char ch[2]="\0";//定义一个字符串数组,用于存储读取的字符int i=0;fp = fopen("answer.txt","w");//写方式打开文件a.txtwhile(i < data.length())//逐行读取fp1所指向文件中的内容到text中{ch[0] = data[i++];fputs(ch,fp);//将内容写到fp2所指向文件中}fclose(fp);//关闭文件b.txtcout<<"写入完成......"<<endl;}int main(int argc, char* argv[]){int start, end;int Num=0, flag = 1;string data;read_information(data);char tmpstart[10];char tmpend[10];for(int j=0; data[j]!='\0';j++){if(data[j] == ' '){flag = j + 1;}else if(flag == 1){tmpstart[j] = data[j];}else{tmpend[j-flag] = data[j];}}start = atoi(tmpstart);end = atoi(tmpend);for(int i=start; i<=end; i++){int num = yueshuNum(i);if(num > Num){Num = num;}}char answerchar[10];string answer = "";itoa(Num, answerchar, 10);for(i=0; i<10 && answerchar[i]!='\0'; i++){answer = answer + answerchar[i];}save_information(answer);return 0;}(3)最大间隙问题(P10)(4)设计算法求解fibonacci数列的第110项的值,并统计和分析算法的时间性能。

算法设计与分析实验报告

算法设计与分析实验报告

本科实验报告课程名称:算法设计与分析实验项目:递归与分治算法实验地点:计算机系实验楼110 专业班级:物联网1601 学号: 2016002105 学生姓名:俞梦真指导教师:郝晓丽2018年 05月 04 日实验一递归与分治算法1.1 实验目的与要求1.进一步熟悉C/C++语言的集成开发环境;2.通过本实验加深对递归与分治策略的理解和运用。

1.2 实验课时2学时1.3 实验原理分治(Divide-and-Conquer)的思想:一个规模为n的复杂问题的求解,可以划分成若干个规模小于n的子问题,再将子问题的解合并成原问题的解。

需要注意的是,分治法使用递归的思想。

划分后的每一个子问题与原问题的性质相同,可用相同的求解方法。

最后,当子问题规模足够小时,可以直接求解,然后逆求原问题的解。

1.4 实验题目1.上机题目:格雷码构造问题Gray码是一个长度为2n的序列。

序列无相同元素,每个元素都是长度为n的串,相邻元素恰好只有一位不同。

试设计一个算法对任意n构造相应的Gray码(分治、减治、变治皆可)。

对于给定的正整数n,格雷码为满足如下条件的一个编码序列。

(1)序列由2n个编码组成,每个编码都是长度为n的二进制位串。

(2)序列中无相同的编码。

(3)序列中位置相邻的两个编码恰有一位不同。

2.设计思想:根据格雷码的性质,找到他的规律,可发现,1位是0 1。

两位是00 01 11 10。

三位是000 001 011 010 110 111 101 100。

n位是前n-1位的2倍个。

N-1个位前面加0,N-2为倒转再前面再加1。

3.代码设计:运行结果:1.5 思考题(1)递归的关键问题在哪里?答:1.递归式,就是如何将原问题划分成子问题。

2.递归出口,递归终止的条件,即最小子问题的求解,可以允许多个出口。

3.界函数,问题规模变化的函数,它保证递归的规模向出口条件靠拢(2)递归与非递归之间如何实现程序的转换?(3)分析二分查找和快速排序中使用的分治思想。

《算法设计与分析》实验指导书

《算法设计与分析》实验指导书

《算法设计与分析》实验指导书《算法设计与分析》实验指导书本文档主要用于《算法设计与分析》课程的实验指导。

《算法设计与分析》旨在教会学生处理各种问题的方法,通过实验,使学生能够把所学的方法用于具体的问题,并对所用算法进行比较分析,从而提高学生分析问题、解决问题的能力。

通过该课程的实验,使学生对课堂中所讲述的内容有一个直观的认识,更好地掌握所学的知识,培养学生的实际动手能力,加强学生创新思维能力的培养。

本课程设计了7个设计型实验。

实验内容包括用分治法、动态规划、贪心法、回溯法以及分支限界法求解问题。

一、实验内容安排二、实验基本要求实验前要求学生一定要先了解实验目的、内容、要求以及注意事项,要求学生熟悉实验对象,设计并编写相应的算法。

学生应独立完成所布置实验内容,编写代码,运行程序,记录结果并撰写实验报告。

三、实验报告要求实验结束后,应及时整理出实验报告,实验报告提交书面文档。

四、考核方式理论考试(60%)+实验(30%)+作业(10%)五、实验内容与指导实验一快速排序问题1.实验目的(1) 用分治法求解该问题。

2.实验环境PC机,要求安装Eclipse软件或VC++软件供学生实验。

3.实验内容有n个无序的数值数据,现要求将其排列成一个有序的序列。

4. 实验步骤(1) 输入实现该问题的源代码;(2) 输入测试数据,验证代码的正确性。

5.实验要求(1)做好实验预习,熟悉本实验中所使用的开发环境。

(2)写出实验报告①实验目的②实验内容③出错信息及处理方法④实验结果实验二最少硬币问题1.实验目的(1) 用动态规划求解该问题。

2.实验环境PC机,要求安装Eclipse软件或VC++软件供学生实验。

3.实验内容有n种不同面值的硬币,各硬币面值存于数组T[1:n];现用这些面值的钱来找钱;各面值的个数存在数组Num[1:n]中。

对于给定的1≤n≤10,硬币面值数组、各面值的个数及钱数m,0<=m<=2001,设计一个算法,计算找钱m的最少硬币数。

BX121028俞佳星需求分析实验三

BX121028俞佳星需求分析实验三

1、实验内容或题目图书管理系统2、实验目的与要求需求工程团队以经过评审的前景和范围文档为依据安排计划,展开需求获取活动。

利用需求获取方法,通过多次结合获取与分析的迭代过程,获取用户需求。

完成用例文档(用户需求文档)。

3、实验结果结果文档:需求获取安排计划书;用例文档(用户需求文档);使用的面谈报告和原型物件。

3.1 需求获取安排计划a) 前言1)小组信息系统:人事管理系统小组组长:俞佳星小组成员:李琼、张诗婕、王淋2)目的这一任务已在上一阶段—需求启动阶段完成,通过与客户的第一次面谈,得到了客户的五个业务需求,并分别提出了针对这五个问题的解决方案以及系统特性。

这一阶段完成了项目前景也范围文档以及问题分析过程文档的编写。

3)参考文献《需求工程-----软件建模与分析》项目前景和范围文档问题分析过程文档1b) 前期相关准备1)概要本系统的宗旨是提高人事管理工作的效率,减少相关人员的工作量,使企业的人事管理工作真正做到科学、合理的规划,系统、高效的实施。

2)收集背景资料立足于企业实际,着眼于未来发展,建成符合标准化协议、通用性较强、实用的系统,以提高企业人事管理的现代化管理水平,实现信息资源的共享。

人事管理系统是一种基于集中统一规划的数据库数据管理新模式。

在对人事调动、职位变更、工资管理,其实是对员工数据的管理。

本系统的建成无疑会对人事管理提供极大的帮助。

3)定义项目前景和范围人事管理是每个企业都必须切实面对的工作,但一直以来人们使用传统的人工方式管理企业的员工。

这种方式存在着许多缺点,如效率低、保密性差且较为繁琐。

另外,随着公司规模的增加、员工的增长,其工作量也将大大增加,这必将增加人事管理工作的工作量和劳动强度,这将给公司的人事变动、职位升迁、工资管理等都带来了很多困难。

c) 需求获取1)概要实现以下功能登陆系统:注销用户、系统退出管理:员工管理、工资管理、职位变动查询:员工查询、工资查询2)涉众分析与硬数据采样涉众为:中、小型企业经过对甲方的调查,并多次与甲方负责人进行研讨之后,我们会加深了对人事管理系统业务的了解,与此同时,讲整个人事管理系统的业务流程抽象描述如下:发生人事变更之后,找到该员工的信息,对其修改。

算法分析与设计实验指导书

算法分析与设计实验指导书

《算法分析与设计》实验指导本书是为配合《算法分析与设计实验教学大纲》而编写的上机指导,其目的是使学生消化理论知识,加深讲授内容的理解,尤其是一些算法的实现及其应用,培养学生独立编程和调试程序的能力,使用学生对算法的分析与设计有更深刻的认识。

上机实验一般应包括以下几个步骤:1、准备好上机所需的程序,手编程序应书写整齐,并经人工检查无误后才能上机。

2、上机输入和调试自己所编的程序。

一人一组,独立上机调试,上机时出现的问题,最好独立解决。

3、上机结束后,整理出实验报告。

实验报告应包括:题目,程序清单,运行结果,对运行情况所作的分析。

本书共分阶段4个实验,每个实验有基本题和提高题。

基本题必须完成,提高题根据自己实际情况进行取舍。

题目不限定如下题目,可根据自己兴趣爱好做一些与实验内容相关的其它题目,如动态规划法中的图象压缩,回溯法中的人机对弈等。

其具体内容如下:实验一分治与递归(4学时)基本题一:基本递归算法一一、实验目的与要求1、熟悉C/C++语言的集成开发环境;2、通过本实验加深对递归过程的理解;二、实验内容掌握递归算法的概念和基本思想,分析结果能够用递归方法实现整数的划分。

三、实验题:任意输入一个整数,输出结果能够用递归方法实现整数的划分。

四、四实验步骤1、理解算法思想和问题要求;2、编程实现题目要求;3、上机输入和调试自己所编写的程序;4、验证分析实验结果;5、整理实验报告。

基本题二:棋盘覆盖问题一、实验目的与要求1、掌握棋盘覆盖问题的算法;2、初步掌握分治算法。

二、实验题目棋盘覆盖问题在一个2k*2k方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一个特殊棋盘。

在棋盘覆盖问题中,要用图标4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。

提高题一:二分搜索一、实验目的与要求1、熟悉二分搜索算法;2、初步掌握分治算法。

二、实验题1、高a【0:n-1】是一个已排好的数组。

江苏海洋大学计算机工程学院实验报告书

江苏海洋大学计算机工程学院实验报告书

江苏海洋大学计算机工程学院
实验报告书
课程名:算法分析与设计A
题目:回溯算法
班级:
学号:
姓名:
1、实验内容或题目
1) 图着色问题(3着色,以右侧无向图为对象。

也可以自行设计无向图,需在程序运行截图处给出无向图结构。


2) 哈密顿的回路算法(以图8.5为例)
3) 八皇后问题 2、实验目的与要求
1)
掌握回溯算法的设计思想; 2)
掌握空间树的构造方法,以及在求解过程中如何存储求解路径; 3)
考察回溯法求解问题的有效程度; 4) 用c/c++/java 等回溯法实现。

3、实验步骤与源程序
⑴ 实验步骤
⑵ 源代码
4、测试数据与实验结果
5、结果分析与实验体会 A B C D
E。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
2:
#include<stdio.h>
int a(int n);
//////////////////////////
int cal(int n){
int i,result=0;
for(i=1;i<=n;i++){
result=result+a(i);
}
return result;
}
//////////////递归函数///////////////
int a(int
else if(n%2==0)g=a(n/2)+1;
else g=a((n-1)/2)+a((n+1)/2);
return g;
}
/////////////主函数/////////
int main(){
int n;
printf("Please input n:");
scanf("%d",&n);
printf("%d\n",cal(n));
}
四、实验设备
PC机
五、实验步骤
1、理解算法思想和问题要求;
2、编程实现题目要求;
3、上机输入和调试自己所编的程序;
4、验证分析实验结果;
六、实验结果
1:
#include<stdio.h>
long func(long n);
///////////////////////////
long cal(int n){
int i;
long result=0;
for(i=1;i<=n;i++){
result=result+func(i);
}
return result;
}
/////////////第n项斐波那契数列///////////
long func(long n){
long g;
if(n==1 || n==2)g=1;
2、给定一个字符串s和一个字符x,编写递归算法实现以下功能:
检查x是否在s中,计算x在s中出现的次数。
三、实验原理
一个递归定义包括两部分:基础情况和递归部分。
递归算法:是指直接或间接调用自身的算法。递归本质上也是一种循环的算法结构,它把较复杂的计算归结为较简单情形的计算,直至归结到最简单情形的计算,并最终得到计算结果为止。
else g=func(n-1)+ func(n-2);
return(g);
}
/////////////主程序//////////////
int main(){
int n;
printf("Please input n:");
scanf("%d",&n);
printf("Result:%d\n",cal(n));
电子信息学院
实验报告书
课程名:算法设计与分析
题目:实验四递归算法
实验类别【设计型】
班级:BX1210
学号:************
******
一、实验目的
1、熟悉C/C++语言的集成开发环境;
2、通过本实验加深对递归过程的理解。
二、实验要求
掌握递归算法的概念和基本思想,
1、给出n!的递归定义式,并设计一个递归函数计算n!
相关文档
最新文档