欧拉回路.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
欧拉回路

三、欧拉回路 1、欧拉路:在无孤立顶点的图中,若存在一条路,经过图中每条边一次且仅一次,则称此路为欧拉路。如下图1(左)中存在一条从顶点1到顶点6的欧拉路。后面的例题(一笔画问题)本质上就是判断一个图是否存在欧拉路。 2、欧拉回路:在无孤立顶点的图中,若存在一条路,经过图中每条边一次且仅一次,且回到原来位置,则称此路为欧拉回路。如下图1(右)中任意两个顶点之间都存在欧拉回路。著名的柯尼斯堡七桥问题(图论起源)本质上就是讨论一个图的欧拉回路问题。 图1 3、欧拉图:存在欧拉回路的图,称为欧拉图,上图1(右)所示的图就是一个欧拉图。 4、定理1:存在欧拉路的条件:图是连通的,且存在0个或2个奇点。如果存在2个奇点,则欧拉路一定是从一个奇点出发,以另一个奇点结束。 5、定理2:存在欧拉回路的条件:图是连通的,且不存在奇点。 6、哈密尔顿图:在无孤立顶点的连通图中,若存在一条路,经过图中每个顶点一次且仅一次,则称此图为哈密尔顿图。 7、哈密尔顿环:是一条沿着图的n条边环行的路径,它访问每一个顶点一次且仅一次,并且返回到它的开始位置。 图3 8、寻找欧拉回路的算法 3的情形,下面介绍一种基于递归的经典算法框架:? find_circuit(结点i); i有邻居时 {??选择任意一个邻居j; (i,j); find_circuit(结点j); } circuit[circuitpos]=结点i; circuitpos:=circuitpos+1; find_circuit。如果是寻找欧拉路径,对一个奇点执行find_circuit。算法的时间复杂度为O(m+n)。 5、寻找一个图的欧拉回路的算法实现 [参考程序] program?ex5; const??maxn=100; var g:array[1..maxn,1..maxn]?of?longint; ???du:array[1..maxn]?of?longint; ???circuit:array[1..maxn]?of?longint; ???n,e,circuitpos,i,j,x,y,start:longint; procedure?find_circuit(i:longint); var?j:longint; begin 牋牋?,cfor?j:=1?to?n?do 牋牋牋牋?:=1?if?g[i,j]=1?then 牋牋牋牋牋牋,j]=1?begin 牋牋牋牋牋牋牋牋?=1?then g[i,j]:=0; 牋牋牋牋牋牋牋牋?; ?then g[j,i]:=0; 牋牋牋牋牋牋牋牋?; ?then find_circuit(j); 牋牋牋牋牋牋ircuitend; 牋牋?; circuitpos:=circuitpos+1; 牋牋?cucircuit[circuitpos]:=i; end; begin 牋牋?cufillchar(g,sizeof(g),0); 牋牋?lcread(n,e); 牋牋?d(for?i:=1?to?e?do 牋牋??ibegin 牋牋牋牋牋 =1?tread(x,y); 牋牋牋牋牋x,y);g[x,y]:=1; 牋牋牋牋牋]:=1;g[y,x]:=1; 牋牋牋牋牋]:=1;du[x]:=du[x]+1; 牋牋牋牋牋:=du[du[y]:=du[y]+1; 牋牋?y]end; 牋牋?; start:=1; 牋牋?rtfor?i:=1?to?n?do 牋牋牋牋?:=1?if?du[i]?mod?2?=1?then ????????????start:=i; ?????circuitpos:=0; ?????find_circuit(start); ?????for?i:=1?to?circuitpos?do?write(circuit[i],?); ?????writeln; end. 9、寻找哈密尔顿环的算法 四、应用举例 例6、一笔画问题(one.pas,one.exe) [问题描述]? No?Solution!”。 [输入格式]? one.in,共n+1行,第1行为图的顶点数n,接下来的n行(每行n个数据)为图的邻接矩阵,G[i,j]=1表示顶点i和顶点j有边相连,G[i,j]=0表示顶点i和顶点j无边相连。 [输出格式]? one.out,若能一笔画出,输出一笔画出的顶点先后顺序,否则输出“No?Solution!”。 [样例输入] 6 0?1?0?0?1?1 1?0?1?1?0?1 ????????0?1?0?1?0?0 ????????0?1?1?0?1?1 ????????1?0?0?1?0?1 1?1?0?1?1?0 [样例输出] 5---1---2---3---4---2---6---4---5---6---1 [参考程序] pr

文档评论(0)

rovend + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档