(图论)matlab模板程序.docxVIP

  • 0
  • 0
  • 约1.03万字
  • 约 22页
  • 2020-10-29 发布于山东
  • 举报
( 图论 )matlab 模板程序 第一讲:图论模型 程序一:可达矩阵算法 根据邻接矩阵 A (有向图)求可达矩阵P(有向图) function P=dgraf(A) n=size(A,1); P=A; for i=2:n P=P+A^i; end P(P~=0)=1; % 将不为 0 的元素变为 1 P; 程序二:无向图关联矩阵和邻接矩阵互换算法 表示所给出的图的相应矩阵 W表示程序运行结束后的结果 f=0 表示把邻接矩阵转换为关联矩阵 f=1 表示把关联矩阵转换为邻接矩阵 %无向图的关联矩阵和邻接矩阵的相互转换 function W=incandadf(F,f) if f==0 % 邻接矩阵转换为关联矩阵 m=sum(sum(F))/2; % 计算图的边数 n=size(F,1); W=zeros(n,m); k=1; for i=1:n for j=i:n if F(i,j)~=0 W(i,k)=1; % 给边的始点赋值为 1 W(j,k)=1; % 给边的终点赋值为 1 k=k+1; end end end elseif f==1 % 关联矩阵转换为邻接矩阵 m=size(F,2); n=size(F,1); W=zeros(n,n); for i=1:m a=find(F(:,i)~=0); W(a(1),a(2))=1; % 存在边,则邻接矩阵的对应值为 1 W(a(2),a(1))=1; end else fprint( Please imput the right value of f ); end W; 程序三:有向图关联矩阵和邻接矩阵互换算法 %有向图的关联矩阵和邻接矩阵的转换 function W=mattransf(F,f) if f==0 % 邻接矩阵转换为关联矩阵 m=sum(sum(F)); n=size(F,1); W=zeros(n,m); k=1; for  i=1:n for j=i:n if F(i,j)~=0 % W(i,k)=1; % W(j,k)=-1; %  由 i 发出的边,有向边的始点 关联矩阵始点值为 1 关联矩阵终点值为 -1 k=k+1; end end end elseif f==1 % 关联矩阵转换为邻接矩阵 m=size(F,2); n=size(F,1); W=zeros(n,n); for i=1:m a=find(F(:,i)~=0); % 有向边的两个顶点 if F(a(1),i)==1 W(a(1),a(2))=1; % 有向边由 a(1) 指向 a(2) else W(a(2),a(1))=1; % 有向边由 a(2) 指向 a(1) end end else fprint( Please imput the right value of f ); end W; 第二讲:最短路问题 程序 0:最短距离矩阵 W表示图的权值矩阵 D表示图的最短距离矩阵 %连通图中各项顶点间最短距离的计算 function D=shortdf(W) %对于 W(i,j), 若两顶点间存在弧,则为弧的权值,否则为 n=length(W); D=W; m=1; while m=n for i=1:n for j=1:n if D(i,j)D(i,m)+D(m,j) D(i,j)+ D(i,m)+D(m,j); % 距离进行更新 end  inf  ;当 i=j  时 W(i,j)=0 end end m=m+1; end D; 程序一:Dijkstra 算法(计算两点间的最短路) function [l,z]=Dijkstra(W) n = size (W,1); for i = 1 :n l(i)=W(1,i); z(i)=0; end i=1; while  for  i=n j =1 :n if l(i)l(j)+W(j,i) l(i)=l(j)+W(j,i); z(i)=j-1; if ji i=j-1; end end end i=i+1; end 程序二: floyd 算法(计算任意两点间的最短距离) function [d,r]=floyd(a) n=size(a,1); d=a; for i=1:n for j=1:n r(i,j)=j; end end r; for k=1:n for i=1:n for j=1:n if d(i,k)+d(k,j)d(i,j) d(i,j)=d(i,k)+d(k,j); r(i,j)=r(i,k); end end end end 程序三: n2short.m 计算指定两点间的最短距离 function [P u]=n2short(W,k1,k2) n=length(W); U=W;

文档评论(0)

1亿VIP精品文档

相关文档