MATLAB最短路径画图问题、有向图、无向图、图中高亮最短路径、求出任意两点的最短路径矩阵、找出给定范围内的所有点nearest


MATLAB无向图

无权重w

G1 = graph(s1,t1) ;
plot (G1)
%注意哦,编号最好是从1开始连续编号,不要自己随便定义编号
s1 = [1,2,3,4];
t1 = [2,3,1,1];
G1 = graph(s1,t1) ;
plot(G1) 
%注意字符串元胞数组是用大括号包起来
s2 = {’学校’,’电影院’,’网吧’,’酒店’};
t2 = {’电影院’,’酒店’,’酒店’,’KTV'} ;
G2 = graph(s2,t2);
plot(G2,'linewidth', 2) %设置线的宽度
%下面的命令是在画图后不显示坐标
set( gca,'XTick' ,[] ,'YTick',[]);

无向图,有权重w

%函数graph(s, t,w): 可在s和t中的对应节点之间以w的权重创建边,并生成一个图
s =[1,2,3,4];
t = [2,3,1,1];
w = [3,8,9,2];
G = graph(s,t,w):
plot(G,’ EdgeLabel',G. Edges. Weight,’ linewidth'2)
set( gca,'XTick'[], 'YTick',[] ) ;

Matlab作有向图

无权图

%无权图digraph(s, t)
s =[1,2,3,4,1];
t = [2,3,1,1,4];
G = digraph(s,t) ;
plot (G);
set( gca,'XTick',[], 'YTick', [] );

有权图

%有权图digraph(s, t, w)
s =[1,2,3,4];
t =[2,3,1,1];
w = [3,8,9,2];
G = digraph(s,t,w);
plot (G,’EdgeLabel', G.Edges.Weight,'linewidth', 2);
set( gca,'XTick',[], 'YTick', [] );

最短路径,注意:该函数matlab2015b之后才有

[P,d] = shortestpath (G, start , end [,'Method', algorithm] )
功能:返回图G中start节点到end节点的最短路径

输入参数:

  • G输入图( graph对象| digraph对象)
  • start起始的节点
  • end目标的节点
  • [,‘Method’,algorithm]是可选的参数,表示计算最短路径的算法。一般我们不用手动设置,默认使用的是“auto” ;

输出参数:

  • P 最短路径经过的节点
  • d 最短距离

选项说明:

'auto' (默认值):
'auto'选项会自动选择算法:
'unweighted'用于没有边权重的graph和digraph输入。
'positive'用于具有边权重的所有graph输入,并要求权重为非负数。此选项还用于具有非负边权重的digraph输入。
'mixed'用于其边权重包含某些负值的digraph输入。图
不能包含负循环。
'unweighted'
广度优先计算,将所有边权重都视为1
'positive'
Dijkstra算法,要求所有边权重均为非负数。

'mixed' (仅适用于digraph )
适用于有向图的Bellman-Ford算法,要求图没有负循环。
尽管对于相同的问题, 'mixed'的速度慢于'positive' ,'mixed'更为通用,因为它允许某些边权重为负数。

举例

在这里插入图片描述

s=[1 1 1 2 3 3 4 5 5 5 5 6 6 7 9 9];%编号
t=[2 3 4 5 2 4 6 4 6 7 8 7 5 8 5 8];%能走的下一个编号
w=[6 3 1 1 2 2 10 6 4 3 6 2 10 4 2 3];%距离
G= digraph(s,t,w);
plot(G,'EdgeLabel', G.Edges.Weight,'linewidth',2);
set(gca,'XTick',[],'YTick',[] ) ;

[P,d] = shortestpath(G,1,8); %注意:该函数matlab2015b之后才有

%在图中高亮我们的最短路径
myplot = plot(G,'EdgeLabel',G.Edges.Weight,'linewidth',2); %首先将图赋给一个变量
highlight (myplot,P,'EdgeColor','r');%对这个变量即我们刚刚绘制的图形进行高亮处理

在这里插入图片描述在这里插入图片描述

补充:

求出任意两点的最短路径矩阵

%求出任意两点的最短路径矩阵
D=distances(G); %注意:该函数matlab2015b之后才有
D(1,2)% 1 -> 2的最短路径
D(3,9)% 3 -> 9的最短路径

找出给定范围内的所有点nearest(G, s, d)

%找出给定范围内的所有点nearest(G, s, d)
%返回图形G中与节点s的距离在d之内的所有节点
[nodeIDs, dist] = nearest(G, 2,10)
%注意:该函数matlab2016a之后才有
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值