欧拉回路题解

欧拉回路题解
欧拉回路题解

算法总结

算法分块总结 为备战2005年11月4日成都一战,特将已经做过的题目按算法分块做一个全面详细的总结,主要突出算法思路,尽量选取有代表性的题目,尽量做到算法的全面性,不漏任何ACM可能涉及的算法思路。算法设计中,时刻都要牢记要减少冗余,要以简洁高效为追求目标。另外当遇到陌生的问题时,要想方设法进行模型简化,转化,转化成我们熟悉的东西。 图论模型的应用 分层图思想的应用: 用此思想可以建立起更简洁、严谨的数学模型,进而很容易得到有效算法。重要的是,新建立的图有一些很好的性质: 由于层是由复制得到的,所以所有层都非常相似,以至于我们只要在逻辑上分出层的概念即可,根本不用在程序中进行新层的存储,甚至几乎不需要花时间去处理。由于层之间的相似性,很多计算结果都是相同的。所以我们只需对这些计算进行一次,把结果存起来,而不需要反复计算。如此看来,虽然看起来图变大了,但实际上问题的规模并没有变大。 层之间是拓扑有序的。这也就意味着在层之间可以很容易实现递推等处理,为发现有效算法打下了良好的基础。 这些特点说明这个分层图思想还是很有潜力的,尤其是各层有很多公共计算结果这一点,有可能大大消除冗余计算,进而降低算法时间复杂度。 二分图最大及完备匹配的应用: ZOJ place the robots: 二分图最优匹配的应用: 最大网络流算法的应用:典型应用就求图的最小割。 最小费用最大流的应用: 容量有上下界的最大流的应用: 欧拉路以及欧拉回路的应用:主要利用求欧拉路的套圈算法。 最小生成树: 求最小生成树,比较常用的算法有Prim算法和Kruskal算法。前者借助Fibonacci堆可以使复杂度降为O(Vlog2V+E),后者一般应用于稀疏图,其时间复杂度为O(Elog2V)。 最小K度限制生成树: 抽象成数学模型就是: 设G=(V,E,ω)是连通的无向图,v0 ∈V是特别指定的一个顶点,k为给定的一个正整数。 首先考虑边界情况。先求出问题有解时k 的最小值:把v0点从图中删去后,图中可能会出现m 个连通分量,而这m 个连通分量必须通过v0来连接,所以,在图G 的所有生成树中 dT(v0)≥m。也就是说,当k

离散数学第八章一些特殊的图知识点总结

图论部分 第八章、一些特殊的图 8.1 二部图 二部图:定义设无向图G=, 若能将V 划分成V1 和V2 (V1?V2=V, V1?V2=?), 使得G中的每条边的两个端 点都一个属于V1, 另一个属于V2, 则称G为二部图, 记为, 称V1和V2为互补顶点子集. 完全二部图:又若G是简单图, 且V1中每个顶点都与V2中每个顶点相邻, 则称G为完全二部图, 记为K r,s, 其中r=|V1|, s=|V2|. 注意: n 阶零图为二部图. 匹配:设G=, 匹配(边独立集): 任2条边均不相邻的边子集 极大匹配: 添加任一条边后都不再是匹配的匹配 最大匹配: 边数最多的匹配 匹配数: 最大匹配中的边数, 记为β1 例下述3个图的匹配数依次为3, 3, 4.

设M为G中一个匹配 v i与v j被M匹配: (v i,v j)∈M v为M饱和点: M中有边与v关联 v为M非饱和点: M中没有边与v关联 M为完美匹配: G的每个顶点都是M饱和点 定理(Hall定理) 设二部图G=中,|V1|≤|V2|. G中存 在从V1到V2的完备匹配当且仅当V1中任意k 个顶点至少与V2中的k个顶点相邻(k=1,2,…,|V1|). 由Hall定理不难证明, 上一页图(2)没有完备匹配. 定理设二部图G=中, 如果存在t≥1, 使得V1中每个顶点至少关联t 条边, 而V2中每个顶点至多关联t条边,则G 中存在V1到V2的完备匹配.

Hall定理中的条件称为“相异性条件”, 第二个定理中的条件称为t 条件. 满足t 条件的二部图一定满足相异性条件. 8.2 欧拉图 欧拉通路: 图中行遍所有顶点且恰好经过每条边一次的通路. 欧拉回路: 图中行遍所有顶点且恰好经过每条边一次的回路. 欧拉图: 有欧拉回路的图. 半欧拉图: 有欧拉通路而无欧拉回路的图. 几点说明: 上述定义对无向图和有向图都适用. 规定平凡图为欧拉图. 欧拉通路是简单通路, 欧拉回路是简单回路. 环不影响图的欧拉性.

图的连通性总结

图的连通性总结 boboo 目录 1.图的遍历及应用 1.1.DFS遍历 1.2.DFS树的边分类 1.3.DFS树的性质 1.4.拓补排序 1.5.欧拉回路 2.无向图相关 2.1求割顶 2.2求图的桥 2.3求图的块 3.有向图相关 3.1求强连通分量(SCC划分) 3.2求传递闭包 4.最小环问题

一、图的遍历及应用 1.1 DFS遍历 DFS是求割顶、桥、强连通分量等问题的基础。 DFS对图进行染色, 白色:未访问; 灰色:访问中(正在访问它的后代); 黑色:访问完毕 一般在具体实现时不必对图的顶点进行染色,只需进行访问开始时间和访问结束时间的记录即可,这样就可以得出需要的信息了。 -发现时间D[v]:变灰的时间 -结束时间f[v]:变黑的时间 -1<=d[v]

图论学习报告

图论学习报告 报告内容: 一.基本概念: 1.叙述图:所谓图G是一个三元组,记做G=,其中V(G)={v1,v2,v3,…,vn},V(G) ≠?,称为图G的结点集合;E(G)=(e1,e2,…,en),是G的边的集合。ψ(G)称为关联函数。 2.有向图:每一条边都是有向边的图称为有向图。 3.无向图:每一条边都是无向边的图称为有向图。 4.欧拉图:含欧拉回路的无向连通图与含有有向欧拉回路的弱连通有向图统称为欧拉图。 5.哈密顿图:具有哈密顿回路的无向图,与具有哈密顿有向回路的有向图统称为哈密顿图。 6.最短路径:在加权图中找出二个指定点之间的最短路叫做最短路径。 7.树:无圈连通无向图叫做树。 8.二叉树:每个节点最多只有二个子树的树叫做二叉树。 9.最小支撑树:连通加权图里权和最小的支撑树称为最小支撑树。 10.最优二叉树:在所有的带权w1,w2,w3,…,wt的二叉树中,带权最小的二叉树称为最优二 叉树。 11.平面图:如果图G能够示画在曲面S上,且使得它的边近在断点处相交,则称G可嵌入 曲面S。如果图G可以嵌入平面上,则称G是可平面图,已经嵌入平面上的图g称为G 的平面表示。G与g都简称为平面图。 二.算法设计 1:写出Dijkstra算法 {G带有顶点a=v0,v1,…,vn=z和权w(vi,vj),若{vi,vj}不是G中的边,则w(vi,vj)=∞} For i:=1 to n L(vi): ∞ L(a):=0 S:= ¢ {初始化标记,a的标记为0,其余结点标记为∞,S是空集} While z?S Begin u:=不属于S的L(u)最小的一个顶点 S:=S∪{u} For所有不属于S的顶点v If L(u)+w(u,v)

noip算法总结2016

算法总结 一、动态规划和递推 dp一般的解题步骤: 分析问题,弄清题意——从原问题中抽象出模型——根据模型设计状态,要求状态满足最优子结构和无后效性——直接设计状态有难度的话则需要考虑转化模型——根据设计的状态考虑转移——如果过不了题目要求的数据范围,则需要考虑优化 由于动态规划涉及的内容太多,只言片语难以讲清,所以附件中放了很多篇关于动态规划的文章,大部分系原创,并附上了一些经典的论文,主要讲了DP的优化,一些特殊的状态设计技巧 Dp和递推没有本质区别,都是用一些状态来描述问题,并记录下一些信息,根据已知信息推出未知信息,直到得到问题的解 关于DP的优化有两篇神级论文,放在附件里面了,写的非常好。 二、图论及网络流 最小生成树:克鲁斯卡尔算法和普利姆算法, ——重要性质1:最小生成树上任意两点的路径的最大边最小 ——重要性质2:最小生成树的多解(方案个数)只与相同权值的的边有关(省队集训题生成树计数) 最短路:spfa算法、堆+迪杰斯特拉算法 Spfa算法是基于松弛技术的,随机图效果极佳,最坏(网格图或存在负权环)O(nm),适用于任意图,能够判断负权环 ——判负权环的方法:记录每个点当前从原点到它的最短路上边的条数,如果某次更新后这个条数>n-1则存在负权环 堆+迪杰斯特拉则是用了贪心的思想,不断扩大确定dist的集合,同时更新dist,如果边权有负值就不能做,复杂度是O((n+m)logn)的 拓扑排序:可以将有向图转化为一个线性的序列,满足一个点所有的前驱结点都出现在这个点在序列中的位置之前。可以判断这个有向图是否有环 ——一个简单而实用的扩展:给树做类top排序,可以有类似的功能,即每次去掉叶子结点,将树转化为一个具有拓扑关系的序列 ——再扩展:树同构判断,可用类top确定树根是谁,再最小表示法+hash即可 强连通分量、缩点:tarjan算法 核心是每个点记一个时间戳ti[i], 另外low[i]表示i点能延伸出的搜索树中节点的ti[i]的最小值,还要维护个栈记当前路径上的点,low[i]初始化为ti[i],如果搜完i了,ti[i]=low[i]则当前栈顶到i的所有点会在一个强连同分量内。

数学文化报告

1、问题背景 (2) 2 问题的发展与解决 (3) 3 问题的延伸与一笔画定理 (4) 4欧拉图 (4) 4.1欧拉图: (4) 4.2如何判断欧拉图: (5) 4.3求欧拉回路的算法: (6) 5图论 (7) 5.1图的基本概念(Graph) (7) 5.2有向图 (8) 5.3Dijkstra算法(两个点之间的最短路) (8) 分析:要讨论学校的设定点,使得所走的总路程最少,这样就要求学校所在地距离各居民点的总路程最小,所以首先要考虑学校到各居民点的最短路。 (9) 这里以V1为起点,计算最短路。 (9) 6数学文化的收获 (11) 7趣味数学题 (12)

数学文化报告 题目哥尼斯堡七桥 专业信息与计算科学 班级2013070202 姓名李亚梦 学号201307020229 指导教师张萍 二〇一四年十一月二十七日

目录 1、问题背景 (2) 2 问题的发展与解决 (3) 3 问题的延伸与一笔画定理 (4) 4欧拉图 (4) 4.1欧拉图: (4) 4.2如何判断欧拉图: (5) 4.3求欧拉回路的算法: (6) 5图论 (7) 5.1图的基本概念(Graph) (7) 5.2有向图 (8) 5.3Dijkstra算法(两个点之间的最短路) (8) 分析:要讨论学校的设定点,使得所走的总路程最少,这样就要求学校所在地距离各居民点的总路程最小,所以首先要考虑学校到各居民点的最短路。 (9) 这里以V1为起点,计算最短路。 (9) 6数学文化的收获 (11) 7趣味数学题 (12)

1、问题背景 现今的加里宁格勒,旧称哥尼斯堡,是一座历史名城。在十八、十九世纪,那里是东普鲁士的首府,曾经诞生和培育过许多伟大的人物。著名的哲学家,古典唯心主义的创始人康德,终生没有离开过哥尼斯堡一步!二十世纪最伟大的数学家之一,德国的希尔伯特也出生于此地。哥城景致迷人,碧波荡漾的普累格河,横贯其境。在河的中心有一座美丽的小岛。普河的两条支流,环绕其旁汇成大河,把全城分为下图所示的四个区域:岛区(A),东区(B),南区(C)和北区(D)。著名的哥尼斯堡大学,傍倚于两条支流的河旁,使这一秀色怡人的区域,又增添了几分庄重的韵味!有七座桥横跨普累格河及其支流,其中五座把河岸和河心岛连接起来。这一别致的桥群,古往今来,吸引了众多的游人来此散步。早在十八世纪以前,当地的居民便热衷于以下有趣的问题:能不能设计一次散步,使得七座桥中的每一座都走过一次,而且只走过一次? 这便是著名的哥尼斯堡七桥问题。

欧拉回路设计报告

合肥学院 计算机科学与技术系 课程设计报告 2012 ~2013 学年第二学期 课程数据结构与算法 课程设计名称欧拉回路 学生姓名 学号 专业班级计算机科学与技术系11级4班 指导教师 2013 年3月

欧拉回路课程设计 一、课程设计目的 “数据结构与算法课程设计”是计算机科学与技术专业学生的集中实践性环节之一,是学习“数据结构与算法”理论和实验课程后进行的一次全面的综合练习。其目的是要达到理论与实际应用相结合,提高学生组织数据及编写程序的能力,使学生能够根据问题要求和数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来并用软件解决问题,培养良好的程序设计技能。 二、课程设计名称及内容 名称:欧拉回路 内容:欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路? 要求:输入:测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M;随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号)。当N为0时输入结束。三、 三、算法分析 1.1、假设条件 连通图采用邻接表存储,,并且输入顶点信息。 输入的数据为无向图的顶点数和边数,顶点数为大于0小于1000的整数,边数为非负的整数,还有邻接表中结点的值(起点和终点),都为非负整数。 输入的无向图,可为连通也可不连通,也可输入单个顶点的图,程序会进行判断。 1.2、算法描述 1.2.1、无向图的存储结构和连通图的判定 采用邻接表存储无向图,利用graph表示邻接表用来存储无向图,输入结点数M和边数N,还有邻接表的值(起点和终点),即边的信息。 图的连通性的判断,用到图的深度优先搜索,采用深度优先搜索来遍历无向图中的点的信息,从图中某个顶点出发首先访问该顶点,然后任选一个该点未访问的邻接点出发,直到访问完成。计算出深度优先搜索到点的数目,然后与结点数进行比较,如果遍历到的数目小于结点数,则为非连通图,否则,为连通图。 1.22、无向图结点度的求法 在无向图建立时求图结点的度,当输入结点信息时用数组d[i]来存储各节点的度然后判断度得奇偶性for(i=1;i<=M;i++)//结点度的判断 { if(d[i]%2!=0)y++; } 1.23、欧拉回路的判断 判断欧拉回路时根据欧拉定理进行判断,首先要判断是否为连通图,不是连通图就不进行后面的判断。如果时连通图且图中M个顶点的度都为偶数则存在欧拉回路,因此,欧拉图一笔画的判定与求解就是对输入的无向连通图是度的判定。当连通图中所有顶点的度都为偶数时,连通图就存在欧拉回路。 利用深度优先遍历的基本操作来实现的欧拉算法求解欧拉回路。算法就是深度优先遍历连通图,然后求出连通图中各结点的度。 四、系统设计 1.1设计说明 该程序设计共包括四大模块:主函数模块,邻接表建立模块,连通图判定模块,欧拉回

算法总结

填空题 1.算法描述方法:自然语言,流程图,程序设计语言,伪代码 2.算法的5个特性:输入,输出,确定性,有穷性,可行性 3.对程序设计的研究可以分为4个层次:算法、方法学、语言和工具。 4.算法研究的核心问题:时间问题 5.电商中,信息安全是最关键的问题,保证信息安全的一个方法:对需要保密的数据进行加密。 6.算法的有穷性意味着不是所有的计算机程序都是算法。 7.影响算法时间代价的最主要因素是问题规模;运行算法所需要的时间T是问题规模n的函数,记作T(n)。 8.反映算法的运行时间:用算法中基本语句的执行次数来度量算法的工作量。 9.基本语句:是执行次数与整个算法的执行次数成正比的语句,基本语句对算法运行时间的贡献最大,是算法中最重要的操作。 10渐进符号:大O、大八爪鱼、本田 大O:用来描述增长率的上限。当输入规模为n时,算法消耗时间的最大值,这个上限的阶越低,结果就越有价值。T(n)<=c*f(n);O(n2)以n2为上限 大八爪鱼:用来描述增长率的下限,这个下限的阶越高,结果就越有价值。T(n)>=c*g(n);大爪鱼(n2)以n2为下限。 本田:以为着T(n)与f(n)同阶,用来表示算法的精确阶;C1*f(n)>=T(n)>=C2*f(n),则T (n)=本田(f(n)); 11.最好最坏和平均情况:当最好情况出现的概率较大的时候,应分析最好情况;分析最差情况的一个好处:在实时系统尤其重要。 12.非递归算法时间复杂性的分析:关键是建立一个代表算法运行时间的求和表达式,然后用渐进符号表示这个求和表达式。 找算法中的基本语句:算法中执行次数最多的语句就是基本语句,通常是最内层循环的循环体;用大O 13.递归算法的分析:是一种分而治之的方法;3种技术:猜测技术、拓展递归技术、通用分治递推式。 14.下界:能找到一个尽可能大的函数g(n),使得求解该问题的所有算法都可以在八爪鱼(g(n))的时间内完成,则函数g(n)称为该问题计算复杂性的下界。如果已知一个和下界的效率类型相同的算法,则称该下界是紧密的。 平凡下界:对算法读取所有要处理的元素并对所有的输出进行计数,这种计数方法所产生的是平凡下界;往往过小而失去意义,如TSP问题,因为它还没有找到一个多项式时间算法。 判定树模型:是以棵二叉树;成立,控制转移到该节点的左子树,否则右子树,每一个叶子节点表示问题的一个结果;通常忽略算数运算,只考虑分支执行时的转移次数,最坏情况下的时间复杂性不超树高。 最优算法:优于该问题的所有算法;两个算法最优则比较高阶项系数,系数较小的算法,时间性能优 15.易解问题:存在多项式时间算法的问题(排序问题、查找问题、欧拉回路), 16.难解问题:需要指数时间算法解决的问题 17.把多项式时间复杂性作为易解问题和难解问题的分界线的原因:1)多项式函数与指数函数的增长率有本质的差别,具有多项式时间复杂性的算法是可使用的算法,而具有指数时间复杂性的算法,只有当问题规模足够小时才是可使用的算法。2)计算机性能的提高对多项式时间算法和指数时间算法的影响不同;3)多项式时间复杂性忽略系数,但不影响易和难的问题划分;4)多项式时间复杂性的闭包性、独立性 18.不可解问题:停机问题、计算机病毒检测 19.判定问题:仅仅要求回答yes或no的问题。例如停机问题就是一个判定问题,但是不能用任何计算机算法求解,所以,并不是所有的判定问题都可以在计算机上得到求解;还有个重要特性:虽然在计算上对问题求解是困难的,但在计算上判定一个待定解是否解决了该问题却是简单的,如哈密顿回路,是个难解问题,但是验证却很容易。

数据结构图论学习报告

学习报告 报告题目:图论的前世今生 报告要求涵盖以下内容: 1.图论的起源 图论起源于著名的柯尼斯堡七桥问题。在柯尼斯堡的普莱格尔河上有七座桥将河中的岛及岛与河岸联结起来问题是要从这四块陆地中任何一块开始,通过每一座桥正好一次,再回到起点。然而无数次的尝试都没有成功。欧拉在1736年解决了这个问题,他用抽像分析法将这个问题化为第一个图论问题:即把每一块陆地用一个点来代替,将每一座桥用联接相应的两个点的一条线来代替,从而相当于得到一个“图”(如下图)。欧拉证明了这个问题没有解,并且推广了这个问题,给出了对于一个给定的图可以某种方式走遍的判定法则。这就是后来的欧拉路径和欧拉回路。这项工作使欧拉成为图论〔及拓扑学〕的创始人。 2.图论的发展 图论是数学领域中发展最快的分支之一,它以图为研究对象。图论中的图是有若干给定的点及连接两点的线所构成的图形,这种图形常用来描述某些事物之间的某种特定关系,用来代表事物,用连接两点的线表示相应两个事物间具有这种关系。 图论本身是应用数学的一部分,因此,历史上图论曾经被好多位数学家各自独立的建立过。关于图论的文字记载最早出现在欧拉1736年的论文中,他所考虑的原始问题有很强的实际背景。 数学史上著名的七桥问题欧拉只用了一步就证明了不重复地通过7座桥的路线是根本不存在的!这是拓扑学研究的先声。图的染色问题一直是图论研究的焦点问题。数学家赫伍德成功地运用肯普的方法证明了五色定理,即一张地图能够用五种或者更少的颜色染色。美国伊利诺斯大学的黑肯和阿佩尔,经过四年的艰苦工作.终于完成了四色猜想的证明。正是上述那些似乎没有多大意义的游戏的抽象与论证的方法,开创了图论科学的研究。 四色猜想的提出来自英国。1852年,毕业于伦敦大学的弗南西斯?格思里来到一家科研单位搞地图着色工作时,发现了一种有趣的现象:“看来,每幅地图

算法程序设计实验报告

《程序设计》课程设计 姓名:王 学号:

班级:软件工程00班 指导教师:王会青 成绩: 2010年6月 实验一.构造可以使n个城市连接的最小生成树 专业:__软件工程___ 班级:__软件姓名:_王___ 学号:_ 完成日期:_2010/6/26________ 一、【问题描述】 给定一个地区的n个城市间的距离网,用Prim算法或Kruskal算法建立最小生成树,并计算得到的最小生成树的代价。 1 城市间的道路网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。 2 显示出城市间道路网的邻接矩阵。 3 最小生成树中包括的边及其权值,并显示得到的最小生成树的总代价。

4 输入城市数、道路数→输入城市名→输入道路信息→执行Kruskal 算法→执行 Prim 算法→输出最小生成树 二、【问题分析】 1.抽象数据类型结构体数组的定义: #ifndef ADJACENCYMATRIXED 程图

4.数据类型定义 为了用邻接矩阵表示图 G ,先是定义二维数组的每一个元素含道路值然后在图的定义中定义一个此二维数组的结构成员。并且在图中还定义一个用来存放城市的一维数组及int 型的城市数级道路数。 用二维数组的两个下标表示道路,这两个下标又在一位数组中对应两个城市。 这样就建立起了一个城市到城市之间的道路网。 4. 程序主要模块 说明:该程序共含5个模块,本人负责其中2个模块构造: ***************LocateVex(MGraph G, VertexType v)**************** Status LocateVex(MGraph G, VertexType v); { while (strcmp[i], v)) {i++;} 返回 i;

欧拉图实验报告

数据结构课程设计实验报告 课题名称欧拉图的判断 第一章需求分析 欧拉图源于柯尼斯堡七桥问题:同构图中所有边一次且仅一次行遍图中所有顶点的通路称为欧拉通路,同构图中所有边一次且仅一次行遍图中所有顶点的回路称为欧拉回路,具有欧拉通路而没有欧拉回路的图称为半欧拉图。 类似哈密尔顿图,欧拉图是关于连通图的问题,不过是关于边的连通图。 第二章概要设计 1.实现方法 正如哈密尔顿图的判定中建立关于定点的联通图,对于欧拉图我们建立了关于边的类似连通图,同样也是借助深度优先算法递归得到答案。 1)从图中某点出发,依次搜索与该顶点相关联且未访问的边,若存在则该点入栈 并标记为已被访问,计入入栈元素个数。 2)从当前边的另一邻接点出发,只要入栈元素个数不大于边总数且栈不为空就重 复前两步,递归深度优先,直到所有边都被访问。 3)若递归完成后入栈元素个数小于边总数,或者最终到达的边的另一邻接点不是 出发点,则将所有顶点设置为未被访问,回溯到第一步。 2.各个模块及其功能: 基础模块(头文件内容) Bool Visite[]标志访问数组 +(void)(*VisitFunc)(VertexType v)//全局定义 EBox: -(bool) mark -(int) ivex, jvex -(EBox)*ilink, *jlink//call back -(InfoType)*info VexBox:

-(VertexType)data -(EBox)*firstedge AMLGraph: -(VexBox)adjmulist[]//邻接表 -(int)vexnum, edgenum -()Graphkind +(VexBox[?])LocateVex(input)//返回点位置+()CreateGraph() +()DestroyGraph() +()GetVex()+()PutVex() +()InsertArc() +()DeleteArc(VetexType v,w) 删除 +()DeleteVex(v)删除点v +()DFS(v)//以v开始深度优先 +()MarkUnvizited() +()Display() 附流程图

算法设计与分析习题答案1

算法设计与分析习题答案1 习题 1 1. 图论诞生于七桥问题。出生于瑞士的伟大数学家欧拉提出并解决了该问题。七桥问题是这样描述的:北区一个人是否能在一次步行中穿越哥尼斯堡城中全部岛区的七座桥后回到起点,且每座桥只经过一次,南区图是这条河以及河上的两个岛和七座桥的图七桥问题草图。请将该问题的数据模型抽象出来,并判断此问题是否有解。七桥问题属于一笔画问题。输入:一个起点输出:相同的点1,一次步行2,经过七座桥,且每次只经历过一次3,回到起点该问题无解:能一笔画的图形只有两类:一类是所有的点都是偶点。另一类是只有二个奇点的图形。2.在欧几里德提出的欧几里德算法中用的不是除法而是减法。请用伪代码描述这个版本的欧几里德算

法=m-n 2.循环直到r=0 m=n n=r r=m-n 3 输出m 3.设计算法求数组中相差最小的两个元素的差。要求分别给出伪代码和C++描述。//采用分治法//对数组先进行快速排序//在依次比较相邻的差#include using namespace std; int partions(int b,int low,int high) { int prvotkey=b[low]; b[0]=b[low]; while (low while (low=prvotkey)--high; b[low]=b[high]; while (low b[high]=b[low]; } b[low]=b[0]; return low; } void qsort(int l,int low,int high) { int prvotloc; if(low prvotloc=partions(l,low,high);//将第一次排序的结果作为枢轴qsort(l,low,prvotloc-1); //递归调用排序low 到prvotloc-1 qsort(l,prvotloc+1,high); //递归调用排序prvotloc+1到high } } void quicksort(int l,int n) { qsort(l,1,n); //

相关文档
最新文档