最小生成树(MATLAB).doc
上传人:王子****青蛙 上传时间:2024-09-14 格式:DOC 页数:8 大小:213KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

最小生成树(MATLAB).doc

最小生成树(MATLAB).doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

prim算法设置两个集合P与Q,其中P用于存放G得最小生成树中得顶点,集合Q存放G得最小生成树中得边。令集合P得初值为P={V1}(假设构造最小生成树时,从顶点V1出发),集合Q得初值为。Prime算法得思想就是,从所有p∈P,v∈V-P得边中,选取具有最小权值得边pv,将顶点v加入集合P中,将边pv加入集合Q中,如此不断重复,直到P=V时,最小生成树构造完毕,这时集合Q中包含了最小生成得所有边。(找最小得权,不连成圈即可)clc;clear;M=1000;a(1,2)=50;a(1,3)=60;a(2,4)=65;a(2,5)=40;a(3,4)=52;a(3,7)=45;a(4,5)=50;a(4,6)=30;a(4,7)=42;a(5,6)=70;a=[a;zeros(2,7)];a=a+a';a(find(a==0))=M;result=[];p=1;tb=2:length(a);whilelength(result)~=length(a)-1temp=a(p,tb);temp=temp(:);d=min(temp);[jb,kb]=find(a(p,tb)==d);j=p(jb(1));k=tb(kb(1));result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];endresult例、一个乡有7个自然村,其间道路如图所示,要以村为中心建有线广播网络,如要求沿道路架设广播线,应如何架设?Kruskal算法每步从未选得边中选取边e,使它与已选边不构成圈,且e就是未选边中得最小权边,直到选够n-1条边为止。clc;clear;M=1000;a(1,2)=50;a(1,3)=60;a(2,4)=65;a(2,5)=40;a(3,4)=52;a(3,7)=45;a(4,5)=50;a(4,6)=30;a(4,7)=42;a(5,6)=70;[i,j]=find((a~=0)&(a~=M));b=a(find((a~=0)&(a~=M)));data=[i';j';b'];index=data(1:2,:);loop=max(size(a))-1;result=[];whilelength(result)<looptemp=min(data(3,:));flag=find(data(3,:)==temp);flag=flag(1);v1=data(1,flag);v2=data(2,flag);ifindex(1,flag)~=index(2,flag)result=[result,data(:,flag)];endifv1>v2index(find(index==v1))=v2;elseindex(find(index==v2))=v1;enddata(:,flag)=[];index(:,flag)=[];endresult中国邮递员问题中国邮递员问题也可以表示为:在一个有奇点得连通图中。要求增加一些重复边,使得新得连通图不含有奇点,并且增加得重复边总权最小。我们把增加重复边后不含奇点得新得连通图叫做邮递路线,而总权最小得邮递路线叫做最优邮递路线。求图中所示得中国邮递员问题Fleury算法(在一个Euler图中找出Euler环游)注:包括三个文件;fleuf1、m,edf、m,flecvexf、mfunction[Tc]=fleuf1(d)%注:必须保证就是Euler环游,否则输出T=0,c=0n=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;fori=1:nifmod(a(i),2)==1m=m+1;endendifm~=0fprintf('thereisnotexitEulerpath、\n')T=0;c=0;endifm==0vet=1;flag=0;t1=find(matr(vet,:)==1);forii=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;whileflagg[flagged]=edf(matr,eds,vexs,ed,tem);tem=tem+1;ifed(1,eds)~=0&ed(2,eds)~=0T=ed;T(2,eds)=1;c=