图
文章平均质量分 68
瘦弱的皮卡丘
2018
展开
-
七、最短路径——弗洛伊德(Floyd)算法
为了能讲明白弗洛伊德(Floyd)算法的精妙所在,我们先来看最简单的案例。下图是一个最简单的3个顶点连通网图。我们先定义两个二维数组D[3][3]和P[3][3],D代表顶点到顶点的最短路径权值和的矩阵。P代表对应顶点的最小路径的前驱矩阵。在未分析任何顶点之前,我们将D命名为,其实它就是初始的图的邻接矩阵。将P命名为,初始化为图中所示的矩阵。 首先我们来分析,所有的顶点经过v0后到达另一顶点的最短路径。因为只有...原创 2022-03-23 12:11:36 · 22772 阅读 · 4 评论 -
六、最短路径——迪杰斯特拉(Dijkstra)算法
在网图和非网图中,最短路径的含义是不同的。由于非网图它没有边上的权值,所谓的最短路径,其实就是指两顶点之间经过的边数最少的路径;而对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点是源点,最后一个顶点是终点。显然,我们研究网图更有实际意义,就地图来说,距离就是两顶点间的权值之和。而非网图完全可以理解为所有的边的权值都为1的网。迪杰斯特拉是一个按路径长度递增的次序产生最短路径的算法。它的思路大体是这样的。比如...原创 2022-03-22 16:42:13 · 12571 阅读 · 1 评论 -
五、最小生成树——克鲁斯卡尔(Kruskal)算法
现在我们来换一种思考方式,普里姆(Prim)算法是以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树的。这就像是我们如果去参观某个展会,例如世博会,你从一个入口进去,然后找你所在位置周边的场馆中你最感兴趣的场馆观光,看完后再用同样的办法看下一个。可我们为什么不事先计划好,进园后直接到你最想去的场馆观看呢?同样的思路,我们也可以直接就以边为目标去构建,因为权值是在边上,直接去找最小权值的边来构建生成树也是很自然的想法,只不过构建时要考虑是否会形成环路而已。此时我们就...原创 2022-03-22 10:44:02 · 5059 阅读 · 0 评论 -
四、最小生成树——普里姆(Prim)算法
一个连通图的生成树是一个极小的连通子图,它含有图中全部的顶点,但只有足以构成一棵树的n-1条边,那么我们把构造连通图网的最小代价生成树称为最小生成树(就是n个顶点,用n-1条边全部连接起来,并且使得权值的和最小)。现在有如下一个图,以及它的邻接矩阵:我们用下面的算法来寻找最小生成树#include<iostream>#include<vector>#include<queue>using namespace std;#def...原创 2022-03-20 23:17:14 · 906 阅读 · 0 评论 -
三、图的遍历——广度优先遍历
广度优先遍历,又称为广度优先搜索,简称BFS。如果说图的深度优先遍历类似树的前序遍历,那么图的广度优先遍历就类似于树的层序遍历了。邻接矩阵方式的广度优先遍历#include<iostream>#include<vector>#include<queue>using namespace std;#define MAXVEX 100//最大顶点数typedef char VertexType;//顶点类型typedef int EdgeType原创 2022-03-20 13:58:13 · 4728 阅读 · 0 评论 -
二、图的遍历——深度优先遍历
深度优先遍历,也有称为深度优先搜索,简称为DFS。深度优先遍历其实就是一个递归的过程,它从图中某个顶点ⅴ出发,访问此顶点,然后从V的未被访问的邻接点出发深度优先遍历图,直至图中所有和V有路径相通的顶点都被访问到。邻接矩阵方式的深度优先遍历#include<iostream>#include<vector>using namespace std;#define MAXVEX 100//最大顶点数typedef char Ver...原创 2022-03-20 12:49:22 · 6963 阅读 · 1 评论 -
一、图的定义,邻接矩阵和邻接表的实现
目录一、初识图(1)图的定义(2)图的分类二、图的存储结构(1)邻接矩阵(2)邻接表(无向图)(3)其他一、初识图(1)图的定义图(Graph)是由顶点的有穷非空集合(必须存在顶点)和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。(2)图的分类若顶点到顶点之间的边设有方向,则称这条边为无向边。如果图中任意两个顶点之间的边都是无向边,则称该图为无向图。...原创 2022-03-20 10:40:09 · 4734 阅读 · 0 评论