分享好友 最新动态首页 最新动态分类 切换频道
大型网站开发方案/seo整站优化一年价格多少
2024-12-25 12:31

图有邻接矩阵和邻接表两种存储方法,邻接矩阵很简单,这里不讨论,下面我们先看看常用的邻接表表示方法。

大型网站开发方案/seo整站优化一年价格多少

指针表示法一共需要两个结构体

每个节点对应一个VertexNode,其firstedge指向边表(与当前节点邻接的表构成的链表)的头节点。

使用vector模拟邻接表,十分方便简洁,v是一个数组,对应于上面的顶点表,v[i]是一个vector,存放邻接顶点的下标。
这种方法的缺陷是:要求顶点的编号从0~MAXN-1。

head[i]:指向编号为i的顶点的邻接表中第一条边的序号
h:边的序号
e:边表,每条边对应一个序号,由h给出

图的深度优先遍历(DFS)类似于树的前序遍历

图的广度优先遍历(BFS)类似于树的层次遍历

注意,我们这里的队列用来存储已被访问的顶点,即对于每个顶点,我们是先访问,再入队,这样可以避免顶点的重复入队。

最小生成树算法以Prim算法和Kruskal算法最为经典。

初始化:一个顶点,空边集。

其基本思想是,寻找这样的边:满足“一个点在生成树中,一个点不在生成树中”的边中权值最小的一条边。将找到的边加入边集中,顶点加到顶点集中,当所有顶点都加入进来时,算法结束。

由于Prim需要不断读取任意两个顶点之间边的权值,所以适合用邻接矩阵存储。

为找出最短边,我们定义一个候选最短边的集合,用来存放候选的边(一个点在生成树中,一个点不在生成树中)。我们使用数组shortEdge[n]来表示这个集合,数组元素包含adjvex和lowcost两个域,分别表示邻接点和权值。比如shortEdge[i].adjvex = k, shrotEdge[i].lowcost = w表示下标为i和下标为k的顶点邻接,边的权值为w。

Prim算法的时间复杂度为O(n^2),与图中的边数无关,适合求稠密图的最小生成树。

初始化:n个顶点(即n个连通分量,空边集。

其基本思想是:每次从未标记的边中选取最小权值的边,如果该边的两个顶点位于两个不同的连通分量,则将该边加入最小生成树,合并两个连通分量,并标记该边。否则,位于同一个连通分量,则去掉该边(同样标记即可,避免造成回路。

可见,此算法的关键是:如何考察两个顶点是否位于两个不同连通分量。最简单的做法是:使用并查集。

此算法需要对边进行操作,所以我们用边集数组存储图的边,为提高最短边查找速度,可以先按权值排序。

最短路径经典的算法有Dijkstra算法(单源最短路,不能处理负权,SPFA算法(单源最短路,可处理负权,Floyd算法(任一对顶点间的最短路)。

此算法使用贪心策略,这里作为复习,只讲一讲实现,不再讨论原理了,下面贴出一张图,方便大家回忆。

其中黑色顶点之间的灰色边为已选的边,黑色与灰色顶点之间的灰色边为候选边。

每一次添加一条边就更新顶点的最短路径值,贪心策略为每次选取值最小的点。

由于此算法需要快速求得任意两顶点之间边的权值,所以用邻接矩阵存储。

为记录每个顶点的最短路径值,需要辅助数组dist[n]:dist[i]表示当前所找到的从源点v到终点vi的最短路径长度。
初始值:若从v到vi有弧,则dist[i]为弧上的权值,否则为正无穷。

为记录路径,需要辅助数组path[n]:path[i]为一个字符串,表示当前所找到的从源点v到终点vi的最短路径。
初始值:若从v到vi有弧,则path[i]为“v vi”,否则为“”。

数组s[n]:存放源点和已经生成的终点。

伪代码

C++实现

时间复杂度为O(n^2)。

Floyd算法用于求每一对顶点之间的最短路径问题,其算法复杂度为O(n^3)。

注意k要放在最外层,因为dist[i][j] 依赖于 dist[i][k]和dist[k][j], 所以k小的需要先计算。

SPFA(Shortest Path Faster Algorithm(队列优化)算法是求单源最短路径的一种算法,它还有一个重要的功能是判负环(在差分约束系统中会得以体现,在Bellman-ford算法的基础上加上一个队列优化,减少了冗余的松弛操作,是一种高效的最短路算法。

参加另一篇博文

拓扑排序算法的实现——Kahn算法及基于dfs的算法

从前阵子开始,我就打算好好梳理一下学过的基础算法,一来为接下来的面试做准备,二来可以跟大家分享自己学到的知识。

近期比较忙,所以说好的【每日算法】没能做到每日更新。

今天匆匆忙忙将几个图算法回顾了一遍,上面的代码也大多数是伪代码,或者是用C++实现的大体思路(没有经过测试,请见谅)。

接下来可能暂时停更,等到过阵子忙完再好好写几篇质量高一点的博文


每天进步一点点,Come on

 

最新文章
百度手机应用推广方案(百度手机应用推广方案设计)
大家好,今天小编关注到一个比较有意思的话题,就是关于百度手机应用推广方案的问题,于是小编就整理了5个相关介绍百度手机应用推广方案的解答,让我们一起看看吧。百度推广,是怎么做的,费用什么的?百度推广有用吗?我想做百度推广?刚
从百度流失看中国人工智能企业有哪些AI大牛?
人工智能热潮,你家有AI大牛吗?人工智能的异常火热,有望成为未来10年乃至更长时间内科技产业发展焦点,但推动该技术的发展关键因素是人才和数据,下面就来看看科举巨头和初创企业都有哪些人工智能技术大牛
淘宝和淘特的区别在哪里,淘宝和淘特商品互通吗
淘宝和淘特作为阿里巴巴集团旗下的两大电商平台,各自拥有独特的定位和运营模式,满足了不同消费者的购物需求。本文将详细探讨淘宝和淘特之间的区别,并解答关于两者商品是否互通的问题。一、淘宝和淘特的区别在哪里1. 平台定位与运营模式
剧集“脱水”大砍、16集以上全毙!短剧迎来新一轮冲击!
文|DataEye研究院传统长剧要变天了!爱奇艺三季度财报披露,爱奇艺龚宇表示,将战略调整娱乐产品,加码微短剧的开发,将微短剧作为长视频的补充。接着网传,2025年1月1日起,某长视频平台将不再接收16集以上的自制剧和定制剧,经多方求证
超强优化大师 v1.0.0
超强优化大师app是一个非常专业和易于使用的在线清理和优化软件平台。这款超强优化大师app为你提供了非常全面的清洁服务。手机里的各种深度缓存垃圾,可以帮你快速清理,操作简单,让你的手机再也不会卡顿。超强优化大师app可以解决手机出
热搜版“丽水都莱怎么开挂”揭晓作弊插件详情
坚守网络安全网络安全,是指通过采取必要措施,防范对网络的攻击、侵入、干扰、破坏和非法使用以及意外事故,使网络处于稳定可靠运行的状态,以及保障网络数据的完整性、保密性、可用性的能力。其实作为普通网民来看,网络安全就是如何在虚
水清岸绿产业优美丽长江(马鞍山)经济带信息管理服务平台(二期)(第二次)竞争性磋商公告
项目概况水清岸绿产业优美丽长江(马鞍山)经济带信息管理服务平台(二期)(第二次)的潜在供应商应在马鞍山市公共资源交易系统获取采购文件,并于2024年12月26日09点00分(北京时间)前提交响应文件。项目编号:MASCG-0-J-F-2024-1208 项
淘宝直通车的计费方式与充值
(1)开户预存:第一次开户预存500元起。加入时是预付款的方式(和手机预存话费类似,没有任何服务费用), 预付款全部都是未来可使用的推广费用。 (2)按点击计费:按点击计费:免费获得海量点击,只有当潜在买家点击推广信息后才进行扣
怎么样搭建客户管理系统
接下来,我们将深入探讨如何搭建一个科学、高效的客户管理系统,帮助企业在实际操作中落地并取得成效。在搭建客户管理系统之前,企业首先需要明确自身的管理需求与目标。每个企业的客户管理需求不同,这取决于企业的行业、规模、客户群体以
转让店铺在哪里发布免费的信息?3天快速转让店铺的技巧是什么?
在当今快速发展的市场经济中,转让店铺是一种常见的商业行为。那么,如何有效地发布免费信息以实现快速转让呢?本文将为您解答转让店铺信息发布的最佳渠道,以及如何在3天内快速转让店铺的技巧。
相关文章
推荐文章
发表评论
0评