数据结构之图
数据结构之图
Binary Oracle
一名热爱开源和技术的Coder , 开源框架spring committer , golang开源网络库netpoll committer; (脱产备战25考研中,停更一年)
展开
-
AOE网与关键路径
事件最早发生时间 下图演示事件最早发生时间求解过程: 时间最迟发生时间 下图演示事件最晚发生时间求解过程: 事件最早发生时间:从前往后推 事件最晚发生时间:从后往前推 活动的最早,最晚开始时间 下图演示活动最早,最晚发生时间求解过程: 活动最早发生时间等于事件最早发生时间 活动最晚发生时间等于事件最晚发生时间减去活动所需要的时间 关键路径:活动最早开始时间=活动最晚开始时间 提高效率 关键路径算法伪代码 实例: #include<iostream> ...原创 2021-03-31 12:01:58 · 474 阅读 · 0 评论 -
AOV网与拓扑排序
图解演示拓扑排序的过程 不是AOV网的情况 由下可知,当前图中存在回路,不是AOV网 拓扑排序的数据结构 编程流程 拓扑排序算法伪代码 完整代码 #include<iostream> using namespace std; #include<stack> #define MAX 10//最大顶点数为10 //边表结构体 typedef struct EdgeNode { int agjvex;//邻接点域,存储顶点对应的下标 //i...原创 2021-03-28 15:17:53 · 274 阅读 · 0 评论 -
最短路径(Floyd算法,弗洛伊德算法,多源最短路径)
算法思想:一开始各顶点之间的最短路径,就是邻接矩阵值,每一次加入一个顶点,然后判断该顶点加入后,其余起点通过该顶点到达其余顶点能否得到比之前更短的最短路径,如果找到了就进行最短路径和权值和的更新 算法伪代码 代码实现和相关代码注释 #include<iostream> using namespace std; #define Max 10//最大顶点数 #define MANY 65535 class Graph { private: int verNum;//顶点个数 int ar原创 2021-03-26 22:33:48 · 341 阅读 · 1 评论 -
最短路径-----迪杰特斯拉算法
无向图 最短路径:两顶点之间经历的边数最少的路径 网图 最短路径:两顶点之间经历的边上的权值之和最短的路径 迪杰特斯拉算法思路:原创 2021-03-25 18:00:43 · 867 阅读 · 0 评论 -
最小生成树----克鲁斯卡尔算法
克鲁斯卡尔算法基本思想 普利姆算法和克鲁斯卡尔算法比较: 伪代码 数据结构设计 连通分量 图解 注意:将边数组按照权值大小排好序是算法的前提 最小生成树算法 完整代码 #include<iostream> using namespace std; #define MaxVertex 10//最大顶点数为10 #define MaxEdge 100//最大边数为100 typedef int DataType;//顶点数组存储的顶点数据类型 //边集结构体 struct原创 2021-03-22 09:39:13 · 285 阅读 · 0 评论 -
最小生成树----prim算法----普利姆算法
生成树的概念 生成树的代价和最小生成树 MST性质 普利姆(prim)算法 图解:原创 2021-03-21 21:37:31 · 346 阅读 · 1 评论 -
最少转机问题
分析: 1.深度优先更适合目标比较明确,以找到目标为主要目的的情况 2.广度优先更适合在不断扩大遍历范围时找到相对最优解的情况 因此这里选用BFS—广度优先遍历 思路:这里要找到转机次数最少的方案,就是要寻找从V0顶点走到V4顶点的最短路径。 1.先列出哪些城市之间存在航线:(两顶点之间是否存在边) v0------v1 v0------v2 v1------v2 v1------v3 v2------v3 v2------v4 v3------v4 2.进行广度优先遍历过程中,当所到达顶点为v4时,就退.原创 2021-03-20 18:23:07 · 746 阅读 · 0 评论 -
图的遍历(BFS)
DFS深度优先遍历 广度优先遍历的过程可以类比树的层序遍历 广度优先遍历的伪代码 BFS //BFS-----广度优先遍历 void Graph::BFS() { queue<DataType> q;//队列存储的是顶点信息 //外层for循环,检查是否每个节点都被访问过,防止存在节点未被访问过 for (int i = 0; i < vertexNum; i++) { if (visit[i]==0)//如果当前节点没有被访问过就进行处理 { //设置当前节点被原创 2021-03-20 13:19:59 · 2158 阅读 · 1 评论 -
图的遍历(DFS)
DFS:深度优先遍历 图的遍历操作 如何选择遍历的起始节点 从某个起点始可能到达不了所有的节点,怎么办? 广度优先遍历 伪代码 邻接矩阵的方式 图的深度优先遍历递归算法 void Graph::DFS(int v) { //当前节点被访问过的标志 visit[v] = 1; //访问当前节点 cout << vertex[v] << endl; //对顶点在边表中该行的所有边关系进行遍历,如果==1表示是邻接点,并且还要判断当前顶点是否被访问过 for (in原创 2021-03-20 10:48:47 · 5435 阅读 · 0 评论 -
邻接表
邻接矩阵缺点: 邻接矩阵是不错的存储结构,但是我们发现,对于边数相对于顶点较少的图,这种结构是存在对存储空间的极大浪费的 因此在处理稀疏图时,可以采用下面将要介绍的邻接表 无向图的邻接表 有向图的邻接表 网图的邻接表 邻接表存储有向图的类 有向图邻接表的构造函数初始化操作 邻接表的构造函数和输出函数代码实现 #include<iostream> using namespace std; //邻接链表 typedef char DataType; //顶点的数据类型 /原创 2021-03-20 09:45:18 · 5080 阅读 · 1 评论 -
图的存储结构----邻接矩阵
邻接矩阵的数组表示法 无向图的邻接矩阵 无向图的邻接矩阵特点 顶点i的度 求顶点i的所有邻接点 有向图的邻接矩阵 求顶点i的入度 求顶点i的出度 如何判断顶点i到顶点j是否存在边 网图的邻接矩阵 网图定义:每条边带有权的图叫做网 邻接矩阵的无向图类 邻接矩阵中图的构造函数 ...原创 2021-03-18 23:07:52 · 449 阅读 · 0 评论 -
初识图
图的定义 图的逻辑结构 图的基本术语原创 2021-03-18 20:09:52 · 114 阅读 · 0 评论