欧拉图和哈密尔顿图.ppt
《欧拉图和哈密尔顿图.ppt》由会员分享,可在线阅读,更多相关《欧拉图和哈密尔顿图.ppt(57页珍藏版)》请在冰豆网上搜索。
1基本图算法陈嘉庆陈嘉庆欧拉路径/回路一.欧拉回路:
一般不限于简单图,一般指无向图n原问题:
“右边的图中是否存在包含每条边一次且恰好一次的回路?
”n原问题等价于:
欧拉欧拉图CDABACBDEg.哥尼斯堡七桥问题欧拉回路,欧拉通路o图G的一个回路/通路,它经过G中每条边恰好一次,则回路回路/通路称为欧拉回路欧拉回路/通路。
o定义:
如果图G中含欧拉回路欧拉回路,则图G称为欧拉欧拉图。
o定义:
如果图G中仅有欧拉通路欧拉通路,但没有欧拉回路,则图G称为半欧拉半欧拉图。
例“一笔划”问题G中有欧拉通路?
实例上图中,上图中,
(1),(4)为欧拉图为欧拉图o我们定义奇点是指跟这个点相连的边数目有奇数个的点。
对于能够一笔画一笔画的图,我们有以下两个定理。
o定理定理1:
存在欧拉路欧拉路的条件:
图是连通的,有且只有2个奇点个奇点。
o定理定理2:
存在欧拉回路欧拉回路的条件:
图是连通的,有0个个奇点奇点。
o两个定理的正确性是显而易见的,既然每条边都要经过一次,那么对于欧拉路,除了起点和终点外,每个点如果进入了一次,显然一定要出去一次,显然是偶点。
对于欧拉回路,每个点进入和出去次数一定都是相等的,显然没有奇点。
欧拉图欧拉图练习练习1、下图是某展览馆的平面图,一个参观者能否不重、下图是某展览馆的平面图,一个参观者能否不重复地穿过每一扇门?
如果不能,请说明理由。
如果能,复地穿过每一扇门?
如果不能,请说明理由。
如果能,应从哪开始走?
应从哪开始走?
欧拉图欧拉图右图中只有右图中只有A,D两个奇点,是一笔画,所以两个奇点,是一笔画,所以答案是肯定的,应该从答案是肯定的,应该从A或或D展室开始走。
展室开始走。
欧拉图欧拉图例例一个邮递员投递信件要走的街道如下左图所示,图中的数字一个邮递员投递信件要走的街道如下左图所示,图中的数字表示各条街道的千米数,他从邮局出发,要走遍各街道,最后回表示各条街道的千米数,他从邮局出发,要走遍各街道,最后回到邮局。
怎样走才能使所走的行程最短?
全程多少千米?
到邮局。
怎样走才能使所走的行程最短?
全程多少千米?
邮局邮局212111怎么样使怎么样使非欧拉图非欧拉图变为变为欧拉图?
欧拉图?
除去奇点!
除去奇点!
添加边或删除边。
添加边或删除边。
怎么样除去奇点?
怎么样除去奇点?
该题应该采用的办法?
该题应该采用的办法?
重复某些边(添加边)。
重复某些边(添加边)。
欧拉图欧拉图解:
图中共有解:
图中共有8个个奇点奇点,不可能不重复地走遍所有的路。
,不可能不重复地走遍所有的路。
必须在必须在8个奇点间个奇点间添加添加4条线条线,才能消除所有奇点,从而成为能,才能消除所有奇点,从而成为能从邮局出发最后返回邮局的一笔画。
从邮局出发最后返回邮局的一笔画。
当然要在当然要在距离最近的两个奇点间添加一条连线距离最近的两个奇点间添加一条连线,如图中虚线所,如图中虚线所示,共添加示,共添加4条连线,这条连线,这4条连线表示要重复走的路条连线表示要重复走的路显然,这样重复走的路程最短,显然,这样重复走的路程最短,全程全程34千米千米。
走法参考下右图走法参考下右图(走法不唯一走法不唯一)。
212111欧拉图欧拉图2、右图中每个小正方形的边长都是、右图中每个小正方形的边长都是100米。
米。
小明沿线段从小明沿线段从A点到点到B点,不许走重复路,他点,不许走重复路,他最多能走多少米?
最多能走多少米?
该题应该采用的办法?
该题应该采用的办法?
删除某些边,除去奇点对,将删除某些边,除去奇点对,将A、B变为基点!
变为基点!
欧拉图欧拉图解:
解:
这道题大多数同学都采用试画的方法,实际上还是用这道题大多数同学都采用试画的方法,实际上还是用欧拉图欧拉图的判定定理的判定定理来求解更合理、快捷。
来求解更合理、快捷。
首先,图中有首先,图中有8个奇点,在个奇点,在8个奇点之间个奇点之间至少要去掉至少要去掉4条线段条线段,才,才能使这能使这8个奇点变成偶点;个奇点变成偶点;其次,从其次,从A点出发到点出发到B点,点,A,B两点必须是奇点,现在两点必须是奇点,现在A,B都是都是偶点,必须在与偶点,必须在与A,B连接的线段中连接的线段中各去掉各去掉1条线段条线段,使,使A,B成为奇成为奇点。
所以至少要去掉点。
所以至少要去掉6条线段,也就是最多能走条线段,也就是最多能走1800米,走法如下米,走法如下图。
图。
欧拉图欧拉图o求欧拉路的算法很简单,使用深度深度优先遍先遍历即可。
o根据一笔画的两个定理,如果寻找欧欧拉回路拉回路,对任意一个点任意一个点执行深度行深度优先遍先遍历;找欧拉路欧拉路,则对一个奇点一个奇点执行行DFS,时间复杂度为O(m+n),m为边数,n是点数。
欧拉图算法欧拉图算法o以下是寻找一个图的欧拉路的算法实现:
o样例输入:
第一行n,m,有n个点,m条边,以下m行描述每条边连接的两点。
o55o12o23o34o45o51o样例输出:
欧拉路或欧拉回路o154321欧拉图算法欧拉图算法o【参考程序】Euler.cppo#includeo#includeousingnamespacestd;o#definemaxn101ointgmaxnmaxn;/此图用邻接矩阵存储ointdumaxn;/记录每个点的度,就是相连的边的数目ointcircuitmaxn;/用来记录找到的欧拉路的路径ointn,e,circuitpos,i,j,x,y,start;ovoidfind_circuit(inti)/这个点深度优先遍历过程寻找欧拉路oointj;ofor(j=1;jne;ofor(i=1;ixy;ogyx=gxy=1;odux+;/统计每个点的度oduy+;oostart=1;/如果有奇点,就从奇点开始寻找,这样找到的就是ofor(i=1;i=n;i+)/欧拉路。
没有奇点就从任意点开始,oif(dui%2=1)/这样找到的就是欧拉回路。
(因为每一个点都是偶点)ostart=i;ocircuitpos=0;ofind_circuit(start);ofor(i=1;i=circuitpos;i+)ocoutcircuiti;ocout=1)个栅栏。
所有栅栏都是连通的(也就是你可以从任意一个栅栏到达另外的所有栅栏)。
o你的程序必须输出骑马的路径(用路上依次经过的顶点号码表示)。
我们如果把输出的路径看成是一个500进制的数,那么当存在多组解的情况下,输出500进制表示法中最小的一个(也就是输出第一个数较小的,如果还有多组解,输出第二个数较小的,等等)。
输入数据保证至少有一个解。
o【输入格式】fence.ino第1行:
一个整数F(1=F=1024),表示栅栏的数目o第2到F+1行:
每行两个整数i,j(1=i,j=500)表示这条栅栏连接i与j号顶点。
o【输出格式】fence.outo输出应当有F+1行,每行一个整数,依次表示路径经过的顶点号。
注意数据可能有多组解,但是只有上面题目要求的那一组解是认为正确的。
【输入样例输入样例】【输出样例输出样例】91223344245255657461234254657哈密尔顿图问题也是由一则游戏引入的:
问题也是由一则游戏引入的:
1859年,爱尔兰数学家年,爱尔兰数学家Hamilton提出提出的,如图的正十二面体,以的,如图的正十二面体,以12个个正五边形正五边形为面。
又称为正则柏拉图为面。
又称为正则柏拉图体。
这些正五边形的三边相交与体。
这些正五边形的三边相交与20个顶点个顶点的一个多面体。
的一个多面体。
Hamilton用用正十二面体代表地球正十二面体代表地球。
游戏题的内容是:
沿着正十二面体的棱寻。
游戏题的内容是:
沿着正十二面体的棱寻找一条旅行路线,找一条旅行路线,通过每个城市恰好一次又回到出发城市通过每个城市恰好一次又回到出发城市。
这便是。
这便是Hamilton回路回路问题。
问题。
哈密尔顿图欧拉回路欧拉回路是指不重复地走过所有路路径径的回路,而哈密尔顿环哈密尔顿环是指不重复地走过所有的点点,并且最后还能回到起点的回路定义:
通过图定义:
通过图GG的每个的每个结点一次且仅一次的环结点一次且仅一次的环称为称为哈密尔顿环哈密尔顿环。
具。
具有哈密尔顿环的图称为有哈密尔顿环的图称为哈密尔顿图哈密尔顿图。
通过图。
通过图GG的每个结点一次且仅的每个结点一次且仅一次的一次的开路开路称为称为哈密尔顿路哈密尔顿路。
具有哈密尔顿路的图称为。
具有哈密尔顿路的图称为半哈密尔半哈密尔顿图顿图。
例例半半哈密尔顿图哈密尔顿图哈密尔顿图哈密尔顿图哈密尔顿图哈密尔顿图N哈密尔顿图周游世界的游戏的解哈密顿图哈密顿图哈密顿图哈密顿图无哈密顿通路存在哈密顿通路实例o在上图中,o
(1),
(2)是哈密顿图;实例o已知有关人已知有关人员a,b,c,d,e,f,g的有关信息的有关信息oa:
说英英语;ob:
说英英语或西班牙或西班牙语;oc;说英英语,意大利,意大利语和俄和俄语;od:
说日日语和西班牙和西班牙语oe:
说德德语和意大利和意大利语;of:
说法法语、日、日语和俄和俄语;og:
说法法语和德和德语.o试问:
上述:
上述7人中是否任意两人都能交人中是否任意两人都能交谈?
o(可借助其余可借助其余5人中人中组成的成的译员链帮助帮助)解解设设7个个人人为为7个个结结点点,将将两两个个懂懂同同一一语语言言的的人人之之间间连连一一条条边边(即即他他们们能能直直接接交交谈谈),这这样样就就得得到到一一个个简简单单图图G,问问题题就就转转化化为为G是是否否连连通通.如如图图所所示示,因因为为G的的任任意意两两个个结结点点是是连连通通的的,所所以以G是连通图是连通图.因此因此,上述上述7个人中任意两个人能交谈个人中任意两个人能交谈.a:
说:
说英语英语;b:
说:
说英语英语或或西班牙西班牙语;语;C:
说英语说英语,意大利语意大利语和和俄语俄语;d:
说:
说日语日语和和西班牙西班牙语语e:
说德语和:
说德语和意大利语意大利语;f:
说:
说法语法语、日语日语和和俄语俄语;g:
说:
说法语法语和德语和德语.abcdefg解一解二abcdefg英英英英西西日日法法德德意意如如果果题题目目改改为为:
试试问问这这7个个人人应应如如何何安安排排座座位位,才才能能使使每每个个人人都都能能与与他身边的人交谈?
他身边的人交谈?
解解:
用用结结点点表表示示人人,用用边边表表示示连连接接的的两两个个人人能能说说讲讲一一种种语语言言,够够造造出出哈密顿图如右上哈密顿图如右上图图所示。
所示。
a:
说英语;:
说英语;b:
说英语或西班牙语;:
说英语或西班牙语;c;说英语,意大利;说英语,意大利语和俄语;语和俄语;d:
说日语和西班牙语:
说日语和西班牙语e:
说德语和意大利语;:
说德语和意大利语;f:
说法语、日语和俄语;:
说法语、日语和俄语;g:
说法语和德语:
说法语和德语.判断H-图任何一个H_图都可以看成是一个基本回路,再加上其他若干条边H_图的充分条件和必要条件均有,但尚无充要条件H_图的必要条件o定理:
定理:
若若图G=G=(VV,EE)是)是哈密哈密尔顿图,则对于于VV的任意的任意一个非空子集一个非空子集VV11,有,有pp(GGVV11)|V|V11|o这里里pp(GGVV11)表示)表示从从GG中中删除除VV11(删除除SS中的各中的各结点及相关点及相关联的的边)后所剩)后所剩图的分的分图(连通分支)数通分支)数。
|V|V11|表示表示VV11中的中的结点数。
点数。
o推推论若若图G=G=(VV,EE)是半哈密)是半哈密尔顿图,则对于于VV的任的任意一个非空子集意一个非空子集VV11,有,有pp(GGVV11)|V|V11|1.1.H_图的必要条件o例.有H_通路,无H_回路设S=v1,v4,|S|=2W(G-S)=32=|S|例例在图(在图(aa)中去掉结点)中去掉结点uu以后以后pp(GGuu)=2=2,(bb)中去掉结点)中去掉结点uu11和和uu22以后,以后,pp(GGuu11,uu22)=3=3,由此由