这一节简要介绍图论中的基本概念,并主要讲解图论中的最短路径问题。之后会专门开专题讨论集合论与图论哒~
根据图的不同,我们在这里主要将两种最短路径的算法:迪杰斯特拉Dijkstra算法和贝尔曼-福特Bellman-Fold算法。
一 基本概念
1.1 Intro
图论中的图是由若干给定的点以及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系。
一个图可以用数学语言描述为 G ( V ( G ) , E ( G ) ) G(V(G),E(G)) G(V(G),E(G)). V ( v e r t e x ) V(vertex) V(vertex)指的是图的顶点集, E ( e d g e ) E(edge) E(edge)指的是图的边集;
根据边是否有方向,可将图分为无向图 (图一)和有向图 (图二);
另外,有一些图的边上可能会有权值,这样的图我们称为有权图,如图三.
在线作图
1.2 Matlab作图
%函数graph(s,t):可以在s和t中的对应节点之间创建边,并生成一个图
G1 = graph(s1, t1);
plot(G1)
%函数graph(s, t, w):可以在s和t中的对应节点之间以w的权重创建边,并生成一个图
G2 = graph(s2, t2);
plot(G2, 'linewidth', 2) %设置线的宽度
% 下面的命令是在画图后不显示坐标
set(gca, 'XTick', [], 'YTick', []);
% 上面都是无向图,如果要做出有向图,把graph改为digraph即可
因为Matlab做出来的图不是很好看,如果节点比较少,用在线作图会比较好
1.3 图的权重邻接矩阵
1.3.1 无向图
其对应的权重邻接矩阵为
D = [ 0 I n f 3 3 I n f 0 I n f 5 3 I n f 0 2