关于中国邮递员问题和欧拉图应用
- 格式:doc
- 大小:55.00 KB
- 文档页数:8


中国邮路问题中国邮递员问题⼀个邮递员送信,要⾛完他负责投递的所有街道(所有街道都是双向通⾏的且每条街道能够经过不⽌⼀次),完毕任务后回到邮局,应按如何的路线⾛,他所⾛的路程才会最短呢?解决⽅式1、图论建模因为街道是双向通⾏的,我们能够把它看成是赋权⽆向连通图,将路⼝模型为点,街道模型为边,街道的长度就是每条边的权值,问题转化为在图中求⼀条回路,使得回路的总权值最⼩。
1.1最理想的情况若图中有欧拉回路,由于欧拉回路通过全部的边,因此不论什么⼀个欧拉回路即为此问题的解。
1.2若G仅仅有两个Vi,Vj则有从Vi到Vj的欧拉迹,从Vj回到Vi则必须反复⼀些边,使反复边的总长度最⼩,转化为求从Vi到Vj的最短路径。
算法:1)找出奇点Vi,Vj之间的最短路径P;2)令G’ = G + P;3)G’为欧拉图,G’的欧拉回路即为最优邮路。
1.3普通情况,奇点数⼤于2的时,邮路必须反复很多其它的边。
Edmonds算法(匈⽛利算法)思想:步骤:1)求出G全部奇点之间的最短路径和距离;2)以G的全部奇点为结点(必为偶数),以他们之间的最短距离为节点之间边的权值,得到⼀个全然图G1;3)将M中的匹配边(Vi,Vj)写成Vi与Vj之间的最短路径经过的全部边集合Eij;4)令G’ = G U { Eij | (Vi,Vj)属于M},则G’是欧拉图,求出最优邮路。
2、详细模块实现2.1最短路径⽤ Dijkstra算法计算Dijkstra算法是⼀种最短路径算法,⽤于计算⼀个节点到其他全部节点的最短路径。
2.1.1算法思想:按路径长度递增次序产⽣最短路径算法: 把V分成两组: 1)S:已求出最短路径的顶点的集合 2)V-S=T:尚未确定最短路径的顶点集合将T中顶点按最短路径递增的次序增加到S中,保证:1)从源点V0到S中各顶点的最短路径长度都不⼤于从V0到T中不论什么顶点的最短路径长度 2)每⼀个顶点相应⼀个距离值 S中顶点:从V0到此顶点的最短路径长度 T中顶点:从V0到此顶点的仅仅包含S中顶点作中间顶点的最短路径长度2.1.2求最短路径步骤 1)初始时令 S={V0},T={ 其余顶点},T中顶点相应的距离值 若存在<V0,Vi>,d(V0,Vi)为<V0,Vi>弧上的权值;若不存在<V0,Vi>,d(V0,Vi)为∝ 2)从T中选取⼀个其距离值为最⼩的顶点W且不在S中,增加S 3)对S中顶点的距离值进⾏改动:若加进W作中间顶点,从V0到Vi的距离值缩短,则改动此距离值;反复上述步骤2、3,直到S中包括全部顶点,即W=Vi为⽌2.2图的连通性測试检測⽤户输⼊的图是否是连通图,不是的话没办法求解,提醒⽤户⼜⼀次输⼊。
邮递员问题求解算法
若此连通赋权图是Euler图,则可用Fleury算法求Euler回路,此回路即为所求;关于非Euler图,1973年,Edmonds和Johnson给出下边的解法:
设G是连通赋权图,则
(i)求V0
{v|v
V(G),
d(v)
1(mod2)};
(ii)对每对极点
u ,v V0,求
d(u,v)(
d
(u,v)
是
u
与v的距离,
可用
Floyd
算法求得);
iii)结构完整赋权图K|V0|,以V0为极点集,以d(u,v)为边uv的权;
iv)求K|V0|中权之和最小的完满对集M;
v)求M中边的端点之间的在G中的最短轨;
vi)在(v)中求得的每条最短轨上每条边增添一条等权的所谓“倍边”(即共端点共权的边);
vii)在(vi)中得的图G'上求Euler回路即为中国邮递员问题的解。
多邮递员问题求解
邮局有k(k2)位送达员,同时送达信函,全城街道都要送达,达成任务返回邮局,怎样分派送达路线,使得达成送达任务的时间最早?我们把这一问题记
成kPP。
KPP的数学模型以下:
G(V,E)是连通图,v0
V(G),求G的回路
C1,
,C k,
使得
(i )v0
V(C i)
,i1,2,,k,
(ii)max
(
)min,
w
e
ik e
E(C)
(ii i)
k
E
(C i)E(G)
1。