中国邮递员问题的应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目:姓名:学号:班级:
前 言
我们在生活中都与中国邮递员有了一定的接触,那么什么是中国邮递员?中国邮递员问题产生于1960年,它讨论的主要内容是:“一个投递员应该如何选择线路,才能把所有的由他负责的信件都送到,而且所走的路线又是最短的。

我国管梅谷教授1962变首先并提出了中国邮递员问题的原始模型。

然而在我们研究中国邮递员以前,国外有很多人士研究了所谓的旅行售货员问题:“一个售货员要到n 个城市去售货,问其应该如何的选择路线才能一条路的走完所有的城市,且路程是最短的。

”当n 增大到一定程度的时候我们将难以解决。

所以我们这里的中国投递员的问题也相当于旅行售后员一条线走完所有城市的问题,只要将所有的城市的点换成了我们所要投递的点就可以了。

事实上就是告诉你几个点和几条边及其权重,就其求出某点到某点的最短路的问题。

摘 要
图论在各个领域都有着广泛的应用,在单循道路的寻早上早已经开始应用。

对于中国邮递员等的问题,我们可以用边着色理论和Euler 理论来解决,这里本文将应用于实践,将理论性问题用到福建省漳平市的邮递员发送派件的应走得道路方式。

本文将应用Fluery 算法来求解最终得到与本文所要寻找的问题的结果。

关键词:图论;EULER ;FLEURY 算法;邮递员
1.知识简介
EULER 环游]1[:一条闭途径如果通过图中每条边至少一次就称为环游,图中的每条边恰一次的比途径就称之为EULER 环游,有EULER 环游的图称之为EULER 图。

FLEURY 算法]1[(过河拆桥,尽量不走独木桥):
(1)任取一点0v ,令00w v =。

(2)若迹k k k v e v e 110v w =已经取定,选},,,{e \E e 211k k e e ∈+使得
①1e +k 与k v 相关联。

②除非无奈,选1e +k 使它不是},,,{G 21k k e e e G -=的割边。

(3)若(2)不能再进行下去,那么就终止。

2.实际应用
2.2.1问题综述
福建省漳平市全市辖有2个街道、8个镇、6个乡:菁城街道、桂林街道、新桥镇、双洋镇、永福镇、溪南镇、和平镇、拱桥镇、象湖镇、赤水镇、芦芝乡、西元乡、南洋乡、官田乡、吾祠乡、灵地乡,在这16个地点里每个地点都有一个邮局。

我们将这些地点分别用1~16表示,于是我们通过调查每个地方的距离可以的到如下的简略图(实际距离是下面数值的五倍,单位:/公里)。

图1.各镇关系和距离图
2.2.1模型构建
根据上面的图形我们可以得到权值矩阵:
⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=08.3000000000006008.30000006.800000000
0000010000007000000005.309009.3008.8000
0005.3000000000008.20010000000000002.10
0009000000002.300006.800000000200000000000000002.80002.40009.3000000005.1202.13.1000000020000007.70
007000002.800000000008.8002.3005.120005.400
6000000000005.4000000002.10002.17.700008.000
008.20002.43.100008.00D 2.2.3结果
用MATLAB 编程得到如下结果:
T =
1 7
2 1 8 5 14 11 2 6 9 15 16
3
4 10 13 4 7 13 12
8 5 14 11 2 6 9 15 16 3 4 10 13 4 7 13 12 1 7 2 1
C=
110.2
2.2.4结论
所有当市邮局总部派某邮递员派送的时候,此邮递员可以按照:
菁城街道->和平镇->桂林街道->菁城街道->>拱桥镇->永福镇->官田乡->芦之乡->桂林街道->溪南镇-->象湖镇->吾池乡->灵地乡->新桥镇->双洋镇->赤水镇->南洋镇->双洋镇->和平镇->南洋镇->西元乡->菁城街道(既是出发点也是终点) 可以从结果看出邮递员所要走得路线为551公里。

4.结束语
当今我国正处于高速发展的阶段,信息产业日新月异,在这其中电子商业突起,网上购物人数的数量也不断的处于上升阶段。

对于与之相关的产业也是提出了更为严峻性的考验,对于如何设计才能使得邮递员少走弯路,用最快的方式将派件送到客户手中成了一个关键性的问题。

应用于图论的相关理论,我们可以很好的解决这个问题。

参考文献:
[1].孙惠泉.图论及其应用.北京东黄城根北街16号:科学出版社.2005年3月
附录
jisuan.m
d=[0 0.8 0 0 0 0 1.3 4.2 0 0 0 2.8 0 0 0 0;
0.8 0 0 0 0 7.7 1.2 0 0 0 1.2 0 0 0 0 0;
0 0 0 4.5 0 0 0 0 0 0 0 0 0 0 0 6;
0 0 4.5 0 0 0 7.5 0 0 3.2 0 0 8.8 0 0 0;
0 0 0 0 0 0 0 8.2 0 0 0 0 0 7 0 0;
0 7.7 0 0 0 0 0 0 2 0 0 0 0 0 0 0;
1.3 1.2 0 1
2.5 0 0 0 0 0 0 0 0
3.9 0 0 0 ;
4.2 0 0 0 8.2 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 2 0 0 0 0 0 0 0 0 8.6 0;
0 0 0 3.2 0 0 0 0 0 0 0 0 9 0 0 0 ;
0 1.2 0 0 0 0 0 0 0 0 0 0 0 10 0 0 ;
2.8 0 0 0 0 0 0 0 0 0 0 0
3.5 0 0 0 ;
0 0 0 8.8 0 0 3.9 0 0 9 0 3.5 0 0 0 0 ;
0 0 0 0 7 0 0 0 0 0 10 0 0 0 0 0;
0 0 0 0 0 0 0 0 8.6 0 0 0 0 0 0 3.8;
0 0 6 0 0 0 0 0 0 0 0 0 0 0 3.8 0];
fleufl.m
[T c]=fleuf1(d)
function [T c]=fleuf1(d)
%d表示图的权值矩阵
%T表示边集合
%c表示权重和
n=length(d);
b=d;
b(b==inf)=0;
b(b~=0)=1;
m=0;
a=sum(b);
eds=sum(a)/2;
ed=zeros(2,eds);
vexs=zeros(1,eds+1);
matr=b;
for i=1:n
if mod(a(i),2)==1
m=m+1;
end
end
if m~=0
fprintf('there is not exist Euler path.\n'); T=0;c=0;
end
if m==0
vet=1;
flag=0;
t1=find(matr(vet,:)==1);
for ii=1:length(t1)
ed(:,1)=[vet,t1(ii)];
vexs(1,1)=vet;
vexs(1,2)=t1(ii);
matr(vexs(1,2),vexs(1,1))=0;
flagg=1;tem=1;
while flagg
[flagg ed]=edf(matr,eds,vexs,ed,tem);
tem=tem+1;
if ed(1,eds)~=0 & ed(2,eds)~=0
T=ed;
T(2,eds)=1;
c=0;
for g=1:eds
c=c+d(T(1,g),T(2,g));
end
flagg=0;
break;
end
end
end
End
Edf.m
function [flag ed]=edf(matr,eds,vexs,ed,tem) flag=1;
for i=2:eds
[dvex f]=flecvexf(matr,i,vexs,eds,ed,tem)
if f==1
flag=0;
break;
end
if dvex~=0
ed(:,i)=[vexs(1,i) dvex];
vexs(1,i+1)=dvex;
matr(vexs(1,i+1),vexs(1,i))=0;
else
break;
end
end
Flecvex.m
function [dvex f]=flecvexf(matr,i,vexs,eds,ed,temp) f=0;
edd=find(matr(vexs(1,i),:)==1);
dvex=0;
dvex1=[];
ded=[];
if length(edd)==1
dvex=edd;
else
dd=1;
dd1=0;
kkk=0;
for kk=1:length(edd)
m1=find(vexs==edd(kk));
if sum(m1)==0
dvex1(dd)=edd(kk);
dd=dd+1;
dd1=1;
else
kkk=kkk+1;
end
end
if kkk==length(edd)
tem=vexs(1,i)*ones(1,kkk);
edd1=[tem;edd];
for l1=1:kkk
lt=0;
ddd=1;
for l2=1:eds
if edd1(1:2:l1)==ed(1:2:l2)
lt=lt+1;
end
end
if lt==0
ded(ddd)=edd(l1);
ddd=ddd+1;
end
end
end
if temp<=length(dvex1)
dvex=dvex1(temp);
elseif temp>length(dvex1)&temp<=length(ded) dvex=ded(temp);
else
f=1;
end
end
说明:本论文属个人成果,如有错误的地方,请谅解。

相关文档
最新文档