图论G(graph)中有两个元素:线(边)E(edge)和点V(vertex)
根据边是否有方向又分为,有向图和无向图
边上有加权的称为加权图
图论作图网站:https://csacademy.com/app/graph_editor/
无向无加权matlab代码
s1=[ ];
t1= [ ];
g1=graph(s1,t1);
plot(g1);
这里s1和t1里的数一定要一一对应,且一般s1里数据为1:n,不建议随意更改数字,名称则除外
加入权重:生成一个w储存权重
w=[];
g1=graph(s1,t1,w);
plot(G, 'EdgeLabel', G.Edges.Weight)(G不是函数名,是自己定义的式子)
有向图区别在于使用digraph作图,其他保持不变
向图中起点为i(行),终点为j(列),填写的数据为权重数,无向图为对称矩阵,但是在有向图中如果没有指向则为inf
迪杰斯特拉算法可以用来处理有向图,但是,缺点在于不能处理负权重
为此可采用贝尔曼福特算法,它不再区分节点是否为已访问状态,每次都会更新,但它不可用于负权回路以及无向含负权图
负权回路指的是这一回路上的加权和为负数,不是说负加权
无向负权图:无向的含负权重的图
一般不会出现负权,基本可以解决所有问题
代码:[P,d]=shortestpath(G,start,end)start和end不是坐标数直接输入点号就行
matlab所采用的是迪杰斯特拉算法
输出的参数部分,p:最短路径经过的节点
d:最短的距离