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之后才有