首页
学习
活动
专区
圈层
工具
发布

无向图----无向图的实现

(有权无向图则为边的权重和) 连通图:从任一顶点能够达到另一个任意顶点。...无向图的API: public class Graph Graph(int V)        创建一个含有V个顶点但不含有边的图 int V()        顶点数 int E()       ...toString()        对象的字符串表示 选用数据结构: 邻接矩阵:占用空间太大。...对于含有上百万个顶点的图,V^2的空间需求是不能满足的。 邻接表数组:可以实现。使用一个以顶点为索引的列表数组,其中每个元素都是和该顶点相邻的顶点列表。...典型Graph实现的性能复杂度 数据结构 所需空间 添加一条边 检查v、w是否相邻 遍历v所有相邻顶点 边的列表 E 1 E E 邻接矩阵 V^2 1 1 V 邻接表 E+V 1 degree(V) degree

2.4K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    从社交圈到代码:一文读懂无向图的邻接矩阵

    而今天我们要聊的 “无向邻接矩阵”,就是描述图的 “万能密码本”,哪怕是新手也能轻松 get 它的核心逻辑。 一、先搞懂:什么是 “无向图”?...把这些关系画出来,就是一个典型的 “无向图”—— 没有箭头,只靠线条连接彼此。 二、关键来了:用 “邻接矩阵” 记录关系 既然无向图是 “社交圈”,那怎么把这个圈子 “写进代码” 里?...填充边(无向图要对称赋值!)...五、总结:无向邻接矩阵的核心 其实看完这么多,你会发现无向邻接矩阵一点都不复杂: 本质是 “用表格记录关系”,行和列对应顶点,值对应边; 无向图的关键是 “对称赋值”,体现双向关系; 代码实现围绕 “结构体定义...下次再看到 “图” 的问题,不妨先想想:如果用邻接矩阵来表示,这个 “社交圈” 会是什么样的表格?跟着这个思路走,数据结构的很多难题都会变得简单~

    20710

    有向图的环和有向无环图

    本篇主要分享关于有向图的环和有向无环图(DAG,估计做大数据的同学到处都可以看到),所以相关概念我就不做详细介绍了。 ?...用有向图中各个节点代表着一个又一个的任务,而其中的方向代表的任务的执行顺序。而方向代表着这个在执行这个任务之前必须完成其他节点,例如上图中在5执行必须执行3和0 节点。...所以可以想到有向图中有向环的检测非常重要,例如上面 要是5之前 3要执行,3之前4要执行,4之前5要执行,那么着三个限制条件永远事不可能被执行的,要是一个优先级限制的问题中存在有向环,那么这个问题肯定是无解的...有向环的检测的理念是我们找到了一条边v-》w 要是w已经存在在栈中,就找到了一个环,因为栈中表示的是一条有w-》v的路径,而v-》w正好补全了这个环。也就是存在有向环。所以这个优先任务是有问题的。...这一篇讲清楚 阿里的OceanBase解密 #大数据和云计算技术#: "四有"社区介绍 大数据和云计算技术周报(第56期) 新数仓系列:Hbase周边生态梳理(1) 《大数据架构详解》第2次修订说明

    2.3K50

    OJ刷题记录:无向图的邻接矩阵表示法验证程序 题目编号:515

    无向图的邻接矩阵表示法验证程序 题目编号:515 题目描述: 采用邻接矩阵表示无向图,完成图的创建、图的深度优先遍历、图的广度优先遍历操作。其中图的顶点信息是字符型,图中顶点序号按字符顺序排列。...本输入样例中所用的图如下所示: 输入描述 第一行输入两个值,第一个是图中顶点的个数,第二个是图中边的条数 第二行输入各顶点的信息,即输入每个顶点字符 第三行开始输入每条边,每条边的形式为两个顶点的序号...,中间以空格隔开,输入完一条边换行 输出描述 首先输出图的顶点信息,输出完毕换行 接着输出图的邻接矩阵,假如图中有n个顶点,则输出形式为n行n列的邻接矩阵,输出完毕换行 接下来一行输出从图的第一个顶点开始进行深度优先遍历的序列...,中间以空格隔开,输出完毕换行 最后一行输出从图的第一个顶点开始进行广度优先遍历的序列,中间以空格隔开,输出完毕换行 输入样例 5 7 A B C D E 0 1 0 2 0 3 1 2...A B C D E 0 1 1 1 0 1 0 1 1 0 1 1 0 0 1 1 1 0 0 1 0 0 1 1 0 A B C E D A B C D E 解题思路: 坑点:输入的图可能含有多个连通分量

    1K31

    B 酱的无向图 题解

    B 酱的无向图 题解 [mdx_warning]本题目有版权,禁止复制[/mdx_warning] 题目描述 B 酱有n个节点的无向图,初始时图中没有边。...他依次向图中加入了m条无向边,并询问你加入每条边后图中桥的个数是多少。被删除后能使图中连通块个数增加的边就称为桥。注意图中可能会出现重边及负环。...输入格式 输入第一行为三个正整数n,m, p, p 的含义将在输出格式中介绍。 接下来 m 行,每行两个正整数 u, v,表示新加入的一条边。...对于100%的数据1\leq n,m\leq 5 \times 10^5 思路 对于每一条边,如果加入后无环,那么将其塞入树中,并标出每个点的深度与父亲。...如果是一条非树边,那么就暴力求出他们的LCA(直接选择深度大的往上跳),并且把路径上所有点用并查集缩起来,每个时刻上树上还没有被缩起来的边就是桥。

    1.1K10

    【数据结构】图论存储结构深度解析:邻接多重表如何实现无向图O(1)删边?邻接矩阵链表十字链对比

    但是十字链表法并不能像邻接矩阵和邻接表一样不仅可以存储有向图,还可以存储无向图,十字链表法只能够存储有向图。 那对于无向图而言,有没有一种存储结构既能够提高边的查找效率,又能够节省存储空间呢?...在邻接矩阵中,行数与列数都是图的顶点数 |V| ,因此对应的时间复杂度为 O(|V|) ; 在邻接表中,当我们要查找一个顶点的相邻边时,对于有向图与无向图而言,其查找邻边的时间复杂度也是有所区别: 无向图中...5.3 删除边或结点 在邻接矩阵中: 当我们要删除一条边时,只需要修改对应边在矩阵中的值即可 当我们要删除一个顶点时,需要移动大量的数据 在邻接表中: 有向图: 删除边:只需要删除对应的边结点即可...只能够存储有向图 在邻接多重表中,只能够存储无向图 5.5 表示方式 邻接矩阵是由各个顶点组成的矩阵,因此,其表示方式是唯一的; 在邻接表、十字链表以及邻接多重表中,由于边表的信息是通过链表进行的存储,...从邻接矩阵的刚性布局到链式结构的动态灵动,每一种存储方案都是空间与时间的精妙权衡,而​​邻接多重表无疑是高频删边场景的无向图终极答案​​。 ​​

    86610

    无回路有向图的拓扑排序

    因公司业务需要,在表单中每个字段都会配置自动计算,但自动计算公式中会引用到其他字段中的值。所以希望可以根据计算公式,优先计算引用的公式。所以最终使用了无回路有向图的扩扑排序来实现。.../** * 无回路有向图(Directed Acyclic Graph)的拓扑排序 * 该DAG图是通过邻接表实现的。...ENode { int ivex; // 该边所指向的顶点的位置 ENode nextEdge; // 指向下一条弧的指针 } /**...* 创建图(用已提供的矩阵) * * 参数说明: * vexs -- 顶点数组 * edges -- 边数组 */ public FieldListDG...* 拓扑排序 * * 返回值: * -1 -- 失败(由于内存不足等原因导致) * 0 -- 成功排序,并输入结果 * 1 -- 失败(该有向图是有环的

    1.2K20

    有向无环图的拓扑排序

    首先,介绍一下有向无环图。 从字面上理解: 为有向图 无环 举例, 有向的二叉树是特殊的有向无环图。 如图(关键部分) ?...对于有向图来说,深度优先遍历下,若从head出发到结束时出现一条从head的下级节点mid开始指向head的一条路径,则必定此图有环。 拓扑排序 首先,拓扑排序的对象肯定是有向无环图中左右的点。...其次,若存在路径从a指向b,则拓扑排序结果中a一定在b的前面。 最后,拓扑排序的排序规则(没有那么抽象),依次将入度为零的点拿出去,并抹掉它的出度线。 ? 有图为例 经过第一次筛选得 A ?...第四次筛选的 C,F(若无特殊要求,C,F的顺序是随机的)(这里我们按照字母表来) ?

    1.4K20

    数据结构 图的邻接矩阵

    大家好,又见面了,我是你们的朋友全栈君。 图的邻接矩阵的存储方式是用两个数组来实现的,一个一维数组存储顶点信息,一个二维数组存储线(无向图)或弧(有向图)的信息。...设图G有n个顶点,则邻接矩阵是一个n × n的方阵,定义为: 无向图的邻接矩阵,两个顶点有边则为1,否则,为0;因为是无向图arc[i][j] = arc[j][i],所以矩阵为对称矩阵,对角线为自己到自己的边...设图G有是网图,有n个顶点,则邻接矩阵是一个n × n的方阵,定义为: 无向网图和无向图差不多,就是加了权值,两个顶点之间无边的话距离是∞。 如果是有向图,邻接矩阵就不是对称矩阵了。...vertextype; //定义定点的存储信息为字符型 typedef int arctype; //定义边的权值为int型 //图的邻接矩阵的存储结构 typedef struct {...cin >> w; //输入边所对应的权值 G.arc[i][j] = w; G.arc[j][i] = G.arc[i][j]; //无向图的邻接矩阵为对称矩阵

    94910

    2022-07-31:给出一个有n个点,m条有向边的图, 你可以施展魔法,把有向边,变成无向边, 比如A到B的有向边,权重为7。施展魔法之后,A和B通过该边到达

    2022-07-31:给出一个有n个点,m条有向边的图, 你可以施展魔法,把有向边,变成无向边, 比如A到B的有向边,权重为7。施展魔法之后,A和B通过该边到达彼此的代价都是7。...求,允许施展一次魔法的情况下,1到n的最短路,如果不能到达,输出-1。 n为点数, 每条边用(a,b,v)表示,含义是a到b的这条边,权值为v。...点的数量 边的数量 边的权值 <= 10^6。 来自网易。 答案2022-07-31: 单元路径最短算法。dijkstra算法。 点扩充,边扩充。...("测试结束"); } // 为了测试 // 相对暴力的解 // 尝试每条有向边,都变一次无向边,然后跑一次dijkstra算法 // 那么其中一定有最好的答案 fn min1(n: i32, roads...// 尝试每条有向边,都变一次无向边,然后跑一次dijkstra算法 // 那么其中一定有最好的答案 func min1(n int, roads [][]int) int { ans := 2147483647

    1K10

    有向无环图的自动布局算法

    最近业余在做一个基于结点的编辑工具玩, 遇到一个问题, 就是结点和连线多了, 经常会出现重叠交叉的问题, 导致图看不清楚: 要是这个样子, 还不如不用图清楚呢, 所心就需要找一个方法来进行自动布局, 理想情况是这样的...(手动整理结果): 当然, 手动整理的话, 每个人弄出来的结果都不一样....自动的算法肯定没有100%完美的, 但是总是能方便不少的 在google了一会儿后, 发现这种结点-线组成的图是一有个学名的: directed acyclic graph, 例如这样: 无非我这个图结点上的连接点是有限制的...因为布局只需要大体考虑每个结点的位置 那么, 这个算法需要满足几个条件:  结点之间不能有重叠 连线之间尽量减少交差 结点之间是有基本的层次关系对齐的 基于这些限制条件, google到一个比较有名的算法...Sugiyama's layout algorithm 初步看了一上, 这个算法比较复杂, 是多种算法的集合 自己不是很熟悉这方面的理论知识, 所以还是决定采用第三的算法库 C++可以使用的图绘制算法库

    3.9K50

    【数据结构】图—图的邻接矩阵存储及度计算

    题目描述 假设图用邻接矩阵存储。...输入图的顶点信息和边信息,完成邻接矩阵的设置,并计算各顶点的入度、出度和度,并输出图中的孤立点(度为0的顶点) --程序要求-- 若使用C++只能include一个头文件iostream;若使用C语言只能...—有向图,U—无向图) 顶点信息 边数 每行一条边(顶点1 顶点2)或弧(弧尾 弧头)信息 输出 每组测试数据输出如下信息(具体输出格式见样例): 图的邻接矩阵 按顶点信息输出各顶点的度(无向图)或各顶点的出度...outdegree[GetIndex(tail)]++;             indegree[GetIndex(head)]++; 然后如果是无向图的话,需要对称建立邻接矩阵:             ...if (kind == 'U')                 matrix[GetIndex(head)][GetIndex(tail)] = 1; 无向图的度就是出度和入度相加。

    61530

    C++ 从大数据SPARK框架的DAG引擎,再论有向无环图(DAG)的拓扑排序

    前言 给大学生讲解SPARK时,说spark相比其它的大数据框架,其运行速度更快,是其显著的特点之一。...之所以运行速度快,其原因之一因其使用先进的DAG(Directed Acyclic Graph,有向无环图)执行引擎。...SPARK提供了名为RDD(弹性分布式数据集(Resilient Distributed Dataset)的简称)抽象的数据集。DAG引擎用来保证RDD数据集之间依赖的有序性、可靠性。...DAG是图结构中的一种,称为有向无环图。有向说明图中节点之间是有方向的,无环指图中没有环(回路),意味着从任一顶点出发都不可能回到顶点本身。...如果能证明回边的存在,则可以证明图结构中有环。回边的检查可以直接使用DFS搜索算法,其间有两个小技巧性。 搜索某一个节点时,检查节点的祖先节点是否和某一个子节点重合。

    73710

    C++ 从大数据SPARK框架的DAG引擎,再论有向无环图(DAG)的拓扑排序

    前言 给大学生讲解SPARK时,说spark相比其它的大数据框架,其运行速度更快,是其显著的特点之一。...之所以运行速度快,其原因之一因其使用先进的DAG(Directed Acyclic Graph,有向无环图)执行引擎。...SPARK提供了名为RDD(弹性分布式数据集(Resilient Distributed Dataset)的简称)抽象的数据集。DAG引擎用来保证RDD数据集之间依赖的有序性、可靠性。...DAG是图结构中的一种,称为有向无环图。有向说明图中节点之间是有方向的,无环指图中没有环(回路),意味着从任一顶点出发都不可能回到顶点本身。...如果能证明回边的存在,则可以证明图结构中有环。回边的检查可以直接使用DFS搜索算法,其间有两个小技巧性。 搜索某一个节点时,检查节点的祖先节点是否和某一个子节点重合。

    79910

    数据结构:图的存储结构之邻接矩阵

    图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一维的数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。...设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: ? 我们来看一个实例,图7-4-2的左图就是一个无向图。 ? 我们再来看一个有向图样例,如图7-4-3所示的左图。 ?...在图的术语中,我们提到了网的概念,也就是每条边上都带有权的图叫做网。那些这些权值就需要保存下来。 设图G是网图,有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: ?...,可看作边表 */     int numNodes, numEdges;/* 图中当前的顶点数和边数  */ } MGraph; /* 建立无向网图的邻接矩阵表示 */ void CreateMGraph...cin >> i >> j >> w;         Gp->arc[i][j] = w;         Gp->arc[j][i] = Gp->arc[i][j];/* 因为是无向图,矩阵对称 *

    6.4K80
    领券