本文共 1098 字,大约阅读时间需要 3 分钟。
首先看的是图的各种定义 一大堆 没仔细记 就看了没多久 因为性质太多了
会了 (1)图的创建保存方式 一 邻接矩阵法 用二维数组进行保存即可 二 邻接表 用了很多结构体数组保存点 然后在结构体中会有个首指针 这个指针专门用来保存 与该节点所连接的点 的各种信息 学会了邻接表的创建 虽然太多代码。。但是还是自己能敲出来 (2)图的遍历方式 一 深度优先搜索(dfs) 函数递归调用 由一个节点一直遍历到底,时间复杂度太高 二 广度优先搜索 (bfs) 使用队列实现 一层一层的遍历 时间复杂度度相对 不高 (3)最小生成树 就是构成连通图的最小代价生成的树状结构称为 最小生成树 一共分为俩个内容: 一 普里姆算法 (prim) 首先生成一个邻接矩阵,此算法就是算出从起点出发每次找出最短的路径,然后把路径记录下来 下次继续用这个最短路径找出下一个路径 直到图遍历完毕 具体分开讲 二 克鲁斯卡尔(kruskal) 与普雷姆算法不同的是 这个算法 使用的是边集数组 ,而普雷姆使用的是顶点数组, 克鲁斯卡尔 与并查集一样 只不过就是先把 每条边的权值排个序 然后 用并查集 加入图就行了 (4)最短路径 对于网图来说 最短路径指俩个顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点是源地 最后一个顶点是终点 ,求最短路径 一共有俩种方法: 一: 迪杰斯特拉(Dijkstra)也叫单源路径求法 此算法与最小生成树的普雷姆方法差不多 ,只不过就是用权值保存的数组 要判断路径总和之比 如果小才使用这个顶点做下一次的起始点。 二: 弗洛伊德(floyd) 多源路径法 此算法与简单的dp差不多 首先生成俩个一模一样的邻接矩阵 然后有 三重循环 第一重循环就是 表示借过这个点 然后下面俩层循环 表示起点和终点,如果从起点走到终点的距离 比从起点借过 第一重循环的那个点再到终点 距离 大 那么 我肯定是借过这个点 所以 改变 这个邻接矩阵的值 最后借过的点遍历到 最后 整个图的 最短路径就保存在邻接矩阵里面了 (5)拓扑排序 首先讲一下AOV网 AOV网:在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网 我们称为AOV网 拓扑序列 在一个具有n个顶点的有向图中,满足顶点 vi vj 之间有一条路径 ,则在顶点序列中顶点Vi必在Vj之前 ,则我们称这样的顶点为拓扑序列 拓扑排序 从AOV网中选择一个入度为0的顶点输出,然后删除此顶点,并删除以此顶点为尾的弧,重复此操作,知道输出全部顶点或者AOV网中不存在入度为0的顶点为止转载地址:http://lxqq.baihongyu.com/