首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

利用图遍历路径中位置未知的边和顶点进行ArangoDB主动队列滤波

在图遍历过程中,有时我们需要对路径中的边和顶点进行滤波,以减少不必要的计算或提高查询效率。ArangoDB 是一个支持图遍历的 NoSQL 数据库,它提供了 AQL(ArangoDB Query Language)和 Traversal API 来实现图遍历和滤波。

以下是一个利用 ArangoDB 主动队列进行图遍历路径中位置未知的边和顶点滤波的示例:

1. 创建图和集合

首先,我们需要创建一个图和相关的顶点/边集合。

代码语言:javascript
复制
-- 创建顶点集合
db._createVertexCollection("vertices");

-- 创建边集合
db._createEdgeCollection("edges");

-- 添加一些顶点和边
db.vertices.save({ _key: "A", type: "start" });
db.vertices.save({ _key: "B", type: "middle" });
db.vertices.save({ _key: "C", type: "end" });

db.edges.save("edges/A", "vertices/B", { label: "to_middle" });
db.edges.save("vertices/B", "vertices/C", { label: "to_end" });

2. 使用 Traversal API 进行图遍历和滤波

假设我们要从顶点 "A" 开始遍历,并且只关心那些标签为 "to_middle" 的边和类型为 "middle" 的顶点。

代码语言:javascript
复制
const arangojs = require('arangojs');
const { Database } = arangojs;

const db = new Database({ url: 'http://localhost:8529' });
db.useDatabase('your_database_name');
db.useBasicAuth('username', 'password');

async function traverseGraph() {
  const result = await db.traversal({
    startVertex: 'vertices/A',
    direction: 'outbound',
    edgeCollectionRestriction: ['edges'],
    vertexCollectionRestriction: ['vertices'],
    filter: (config, vertex, path) => {
      // 滤波条件:只关心标签为 "to_middle" 的边和类型为 "middle" 的顶点
      if (path.edges.length > 0 && path.edges[path.edges.length - 1].label === 'to_middle' && vertex.type === 'middle') {
        return true;
      }
      return false;
    },
    visitor: (vertex, path) => {
      console.log('Visited vertex:', vertex._key);
    }
  });

  console.log('Traversal result:', result);
}

traverseGraph().catch(console.error);

解释

  1. 创建图和集合:我们创建了一个简单的图,包含三个顶点和两条边。
  2. Traversal API
    • startVertex:指定遍历的起始顶点。
    • direction:指定遍历方向(outbound 表示从起始顶点向外遍历)。
    • edgeCollectionRestrictionvertexCollectionRestriction:限制遍历的边和顶点集合。
    • filter:自定义滤波函数,用于在遍历过程中进行条件判断。在这个例子中,我们只关心标签为 "to_middle" 的边和类型为 "middle" 的顶点。
    • visitor:遍历过程中访问每个符合条件的顶点时执行的回调函数。

通过这种方式,我们可以灵活地对图遍历路径中的边和顶点进行滤波,以满足特定的业务需求。

注意事项

  • 确保 ArangoDB 服务器和客户端库版本兼容。
  • 根据实际需求调整滤波条件和遍历逻辑。
  • 处理大规模图数据时,注意性能优化和索引的使用。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ArangoDB 系列(1) —— 初识 ArnagoDB

集合管理命令 集合相关方法 图数据库 AQL 语句执行 ArangoDB 的 AQL 语法 插入数据 修改语句 删除语句 查询语句 图的遍历查询 前置知识 ArangoDB 的特性 灵活的数据类型,...支持键值对、文档和图(用于保存社会关系) 在运行对文档或者集合的查询时,能够有选择保持事务的一致性和隔离性 具备复制与分片功能,能够对数据库进行失败配置,并且可以将大数据集分布在多个服务器上 可配置的持久性...代表的是自定义的数据存储位置 ArangoDB 客户端安装与连接 # 上传 ArangoDB 的客户端压缩包,然后解压 tar -xf arangodb3-client-linux-3.9.0.tar..._collection("Characters").drop() 图数据库 # 创建顶点集合 db._create("vertex"); # 创建边集合 db...._id); # 查看以某顶点为终点的边 db.relation.inEdges(myGraph.v2.

2K20

贪婪算法-单源最短路径

前言 感谢每一位朋友的阅读与建议,今天对最短路径blog进行了修改,调整图和部分内容。感谢各位关注。提早祝大家圣诞节平安快乐。...单源最短路径问题描述 给定一个带权有向图G=(V,E),其中每条边的权是一个实数。另外,还给定V中的一个顶点,称为源。现在要计算从源到其他所有各顶点的最短路径长度。这里的长度就是指路上各边权之和。...算法描述 借助队列实现每条边只访问一次。 初始情况下声明所有节点的最短路径未知 起点s声明最短路径为0,并将s入队。...将起点放入队列 从队列中取出节点v,更新v的临接顶点集,针对每个v的临接点w,若dv+cvw的路径。...注:cvw为边(v,w)的权,dv,dw分别为v,w的最短路径 当w不在队列中时,将w放入队列 直到队列为空为止 核心代码 /** * 有权有负值最短路径 * 借助广度优先搜素 * @param

1.1K50
  • 如何去伪存真地看懂一份图数据库的评测报告?

    面向高维数据的操作,这也是本文关注的重点,例如面向全图或子图数据的查询结果返回多个顶点、边组合而成的高维数据结构,可能是多顶点的集合、点边构成的路径、子图(子网)甚至是全图遍历结果。...在此,我们做个明确的说明,无论以何种方式进行高维查询,图数据库中的操作无外乎遵循如下3种遍历模式: 广度优先(BFS):例如K邻查询、最短路径就是典型的广度优先遍历模式。...和ArangoDB原生支持ARM架构。...; 查询方式错误:只进行了单向查询,没有进行双向边遍历查询; 图查询代码实现错误:即没有对结果进行有效的去重——这个我们在多跳K-hop查询中再继续分析。...图10 Tigergraph的仅进行单向遍历的错误的2nd-Hop结果 遗憾的是,Tigergraph的查询结果错误问题在今天的图数据库市场并不是个例,我们在Neo4j、ArangoDB等系统中也发现因底层实现或接口调用等问题而出现的错误

    1.1K30

    数据结构与算法——图最短路径

    2 重要概念 图的路径:图G =中,从任一顶点开始,由边或弧的邻接至关系构成的有限长顶点序列称为路径。   ...简单路径:除第一个和最后一个顶点外,路径中无其它重复出现的顶点,称为简单路径。 回路或环:路径中的第一个顶点和最后一个顶点相同时,称为回路或环。...4.2 算法流程   (1)将所有的顶点分为两部分:已知最短路程的顶点集合P和未知最短路径的顶点集合Q。最开始,已知最短路径的顶点集合P中只有源点s一个顶点。...因此,选择顶点2加入集合P中,令book[2]=1。顶点2加入后,需要考虑经过顶点2进行中转,使得顶点1到达其余顶点的距离发生改变。顶点2的出边有和。...(2)读取队列头的顶点,并将头顶点u出队列,将与u邻接的所有顶点v进行松弛,若v没有在队列中,则将邻接顶点v入队列。如果已经在队列中,则不再入队。   (3)队列为空时,单源最短路径查找完毕。

    4.8K40

    数据结构与算法: 三十张图弄懂「图的两种遍历方式」

    ,按照某种搜索方法沿着图的边访问图中的所有顶点,使每个顶点仅被访问一次,这个过程称为图的遍历。...遍历过程中得到的顶点序列称为图遍历序列。   ...当图采用邻接表存储时,邻接表中只是存储了边结点(e条边,无向图也只是2e个结点),加上表头结点为n(也就是顶点个数),因此时间复杂度为O(n+e)。...图3.3.1.1 (1)选取A为起始点,输出A,A入队列,标记A,当前位置指向A。 (2)队列头为A,A出队列。A的邻接顶点有B、E,输出B和E,将B和E入队,并标记B、E。当前位置指向A。...3.4 算法分析   假设图有V个顶点,E条边,广度优先搜索算法需要搜索V个节点,时间消耗是O(V),在搜索过程中,又需要根据边来增加队列的长度,于是这里需要消耗O(E),总得来说,效率大约是O(V+E

    1.3K20

    数据结构高频面试题-图

    带权有向图的最短路径长度:源点Vm到终点Vn的所有路径中,权值和最小的路径是最短路径,其长度是最短路径长度。 完全图:任意两个顶点都相连的图称为完全图,又分为无向完全图和有向完全图。...初始化入度为 0 的集合需要遍历整张图,具体做法是检查每个结点和每条边,因此复杂度为 O(E+V),然后对该集合进行操作,又需要遍历整张图中的每个结点和每条边,复杂度也为 O(E+V); 空间复杂度:O...对每个equation如"a/b=v"构造a到b的带权v的有向边和b到a的带权1/v的有向边, 之后对每个query,只需要进行dfs并将路径上的边权重叠乘就是结果了,如果路径不可达则结果为-1。...[from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。...附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v] ,满足 u 顶点u 和v的无向图的边。

    2.3K20

    数据结构-图结构

    若图G中的每一条边都有方向,则称G为有向图。 图的常见术语 顶点的度 依附于某顶点v的边数称为该顶点的度,记作TD(v)。 有向图中还有入度和出度的概念。...对于非连通图,则需要分别从不同连通分量中的顶点出发进行搜索,才能访问到图中的所有顶点。 对于有向图,若图中一对顶点之间有双向的路径,则称这两点之间是连通的。...顶点域data用来存放顶点的数据信息 指针域firstArc指向依附于该顶点的第1条边。 通常将一个图的**n**个顶点节点放到一个数组中进行管理,并用该数组的下标表示顶点在图中的位置。...next是指针域,指向下一个边节点。最后一个边节点的next域为null 邻接表由一个顶点数组和一组边链表组成。 顶点数组中存放图的顶点信息,链表中存放图的边信息。...在图的遍历过程中,可能存在一些额外操作,比如计算带权有向图的边权之和,计算两顶点之间路径的距离等。 这些操作都必须依赖图的遍历来实现,仅靠访问图中的每个顶点是无法实现的。

    39020

    数据结构考研面试被问的问题_考研程序设计与数据结构

    层次遍历 从根结点的第一层开始访问 从上到下进行遍历, 从左到右访问结点 (利用队列来实现) 树的遍历 先跟遍历: 先访问根结点 从左到右先跟遍历树的每个子树 后跟遍历: 先依次后跟遍历每根子树, 然后再访问根结点...图的存储结构 邻接表:(链式存储结构)由单链表的表头形成的顶点表,和单链表其余结点形成的边表两部分组成;一般顶点表存放顶点信息和指向第一个边结点的指针 邻接矩阵:(顺序存储结构) 有向图的十字链表法 无向图的多重链表法...1.从候选边中挑选出最小的边输出,并将于该边的另一端顶点并入树中 2.考查所有剩余的顶点,选取与这棵树相接的边最短的边 时间复杂度为O(n2),适用于稠密图 克鲁斯卡尔算法 思路: 每次找出后候选边中权值最小的边...拓扑算法的核心 过程: 从有向图中选择一个没有前驱(入读为0)的顶点输出 删除1中的顶点,并且删除从该顶点发出的全部边 一直重复 若图中没有环的时候,还可采用深度优先搜索遍历的方法进行拓扑排序 关键路径的相关概念...AOE网——对于活动在边上的我网 AOV和AOE的区别 相同点: 都是无环图 不同点:AOV活动在顶点,边无权值,代表活动之前的先后关系, AOE活动在边,边有权值,代表活动持续的时间 关键路径的核心算法

    64810

    定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为: G=(V,E) 其中:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合。 图中可以没有边但必须有点。...路径长度:不带权的为路径上边的个数,带权图中为路径上边的权值之和, 回路:起点与终点相同的路径,包括环。 简单路径,简单回路:除了第一个顶点和最后一个顶点,剩下的顶点没有重复的。...深度遍历方式 利用栈可以进行深度遍历。...基本思想就是将一个节点压入栈中,然后在判断与其邻接的节点中有没有未被访问的节点,有的话就将此节点压入栈中,访问之后的节点要对其进行标记防止其二次访问,每次都对栈顶元素进行判定是否还有未访问的邻接节点,若是全部访问...广度遍历方式 利用队列可以进行广度遍历,就是将一个节点入队,然后输出队首元素的值,将与队首元素相连的所有未被访问的邻接节点入队,队首元素出队,不断进行操作,知道队列为空,就完成了广度遍历。

    16410

    数据结构面试常见问题总结怎么写_前端数据结构与算法面试题

    A: 头指针:是指向第一个节点存储位置的指针 头结点:是放在第一个元素节点之前,便于在第一个元素节点之前进行插入和删除的操作 Q:栈和队列的区别 A:栈和队列都是操作受限的线性表 栈:只能在栈尾入栈、出栈...A: Prim(普里姆)算法:在图中取任意顶点 v 作为起始顶点,并加入集合 V;之后遍历与 V 中顶点相邻的边,选择权值最小且顶点未加入集合 V 的边,把其加入集合 V,直到集合 V 包含所有顶点结束...邻接表:适合稀疏图,节省空间,容易找出邻边,确定两个顶点间是否存在边花费时间代价大 Q:树的存储结构 A:双亲表示法、孩子表示法、孩子兄弟表示法 Q: 图的遍历和树的遍历有哪些 A: 图的遍历:广度优先遍历...,一个区间全部比基准值小,另一个区间全部比基准值大,接着再选取一个基准值来进行排序,以此类推,最后得到一个有序的数列 Q:关键路径和关键活动 A:关键路径是项目中时间最长的活动顺序,决定着可能的项目最短工期...,可能有 1 条或多条 Q:关键路径是用什么数据结构实现的 A:有向无环图 Q:排序算法的介绍 A: 冒泡排序:从左到右依次比较相邻的两个元素,如果前一个元素比较大,就把前一个元素和后一个交换位置,重复地进行直到没有再需要交换

    60720

    C语言图结构总结(一)

    [TD(V)=ID(V)+OD(V)] 路径:从 V1 到 V2 能走的路。 路径的长度:路径上的边或弧的数目。 环 (回路):第一个顶点到最后一个顶点相同的路径。...简单环:除首尾顶点(相同的一个顶点)外其余顶点不重复出现的环。 连通:V1 到 V2 有路径,则 V1 和 V2 是连通的。 连通图 / 强连通图:图中任意顶点 Vi 和 Vj 都是连通的。...)应当最少; 对下一步位置的权重集合进行非递减排序(可以有重复值的递增排序); 然后按照这个排序结果遍历,就可以少很多次递归。...\n"); } free(data); return 0; } # 广度优先遍历 利用队列,每次把上一顶点的所有可选下一顶点依次排入队列,然后按照这个队列依次访问,类似树的层级遍历。...若一个未被遍历过的顶点( 白色顶点 )与多条 紫色边 相连,则只保留权值最小的 紫色边 ,其余 紫色边 弃掉 4. 将 紫色边 中权值最小的那条涂为 红色 ,与其相连的顶点连入生成树 5.

    2K20

    数据结构

    处理散列表中的冲突(冲突原因:同一个位置只能存放一个值) 分离链接:为散列表的每一个位置都创建一个链表并将元素存放在里面。...线性探查:当新元素加入列表时,如果索引为index的位置已被占据,则尝试index+1的位置,依次类推,已找到空位置未知。...图是一种网络抽象模型,它是一组由边连接的节点(或顶点),任何二元关系都可以用图来表示。...,列表示边 #图的遍历 #广度优先搜索(BFS) 队列实现:通过将顶点存入队列,最先入队列的顶线先被搜索。...简单理解:就是一层一层的访问遍历,走完为止。 #深度优先搜索(DFS) 栈实现:通过将顶点粗存入栈中,顶点沿着路径被探索的,存在新的相邻顶点就去访问。

    84410

    【数据结构】图

    其实有两种方式可以存储顶点与顶点之间的关系,一种就是利用二维矩阵(二维数组),某一个点和其他另外所有点的连接关系和权值都可以通过二维矩阵来存储,另一种就是邻接表,类似于哈希表的存储方式,数组中存储每一个顶点...邻接矩阵来实现图其实要方便许多,添加顶点之间的关系时,只需要更改矩阵中对应位置存储的值即可,而无需向邻接表似的还需要额外添加顶点,不过邻接矩阵和邻接表相比各有优劣,对于稠密图,也就是图中边的数量很多,这种图就适合用邻接矩阵来存储...,所以只要元素一入队列那就直接将该元素在visited中的位置写为true即可。...,其实选边的过程是非常头疼的,因为每次选边都需要依次遍历已选择的顶点集合中所有的点,将每个点作为起点连接到未选择的顶点集合中的所有点,相当于要遍历m×n次,m和n分别代表两个集合的顶点个数,等到选择一半的时候...,那些没有被更改存储权值的结点就不需要入队列了,因为这些顶点现存的值其实就已经是最短路径的权值了,这样在每次循环时,就不需要无脑遍历所有顶点作为起始点进行松弛更新了,这样也可以进行优化。

    12410

    数据结构面试常见问题总结

    A: 头指针:是指向第一个节点存储位置的指针 头结点:是放在第一个元素节点之前,便于在第一个元素节点之前进行插入和删除的操作 Q:栈和队列的区别 A:栈和队列都是操作受限的线性表 栈:只能在栈尾入栈、出栈...A: Prim(普里姆)算法:在图中取任意顶点 v 作为起始顶点,并加入集合 V;之后遍历与 V 中顶点相邻的边,选择权值最小且顶点未加入集合 V 的边,把其加入集合 V,直到集合 V 包含所有顶点结束...邻接表:适合稀疏图,节省空间,容易找出邻边,确定两个顶点间是否存在边花费时间代价大 Q:树的存储结构 A:双亲表示法、孩子表示法、孩子兄弟表示法 Q: 图的遍历和树的遍历有哪些 A: 图的遍历:广度优先遍历...,一个区间全部比基准值小,另一个区间全部比基准值大,接着再选取一个基准值来进行排序,以此类推,最后得到一个有序的数列 Q:关键路径和关键活动 A:关键路径是项目中时间最长的活动顺序,决定着可能的项目最短工期...,可能有 1 条或多条 Q:关键路径是用什么数据结构实现的 A:有向无环图 Q:排序算法的介绍 A: 冒泡排序:从左到右依次比较相邻的两个元素,如果前一个元素比较大,就把前一个元素和后一个交换位置,重复地进行直到没有再需要交换

    95130

    最短路径算法–无向图

    1、表示图的数据结构 邻接列表 邻接列表:在邻接列表实现中,每一个顶点会存储一个从它这里开始的边的列表。...比如,如果顶点A 有一条边到B、C和D,那么A的列表中会有3条边 邻接列表只描述了指向外部的边。A 有一条边到B,但是B没有边到A,所以 A没有出现在B的邻接列表中。...邻接矩阵 邻接矩阵:在邻接矩阵实现中,由行和列都表示顶点,由两个顶点所决定的矩阵对应元素表示这里两个顶点是否相连、如果相连这个值表示的是相连边的权重。...例如,如果从顶点A到顶点B有一条权重为 5.6 的边,那么矩阵中第A行第B列的位置的元素值应该是5.6: 、、 图的邻接矩阵存储方式是用两个数组来表示图。...然后,在一个while循环中,从队列中弹出顶点,遍历该顶点的邻接点,若该邻接点的距离未被更新过(表示该邻接点未被访问过),更新邻接点的最短路径距离为 该顶点的距离加上1,并将所有的邻接点入队列。

    1.1K20

    从 0 开始学习 JavaScript 数据结构与算法(十二)图

    下面这是个抽象出来的图 ? 顶点 顶点刚才我们已经介绍过了,表示图中的一个结点。 比如地铁站中某个站/多个村庄中的某个村庄/互联网中的某台主机/人际关系中的人。 边 边表示顶点和顶点之间的连线。...比如地铁站中两个站点之间的直接连线, 就是一个边。 注意:这里的边不要叫做路径,路径有其他的概念,后面会区分。 相邻顶点 由一条边连接在一起的顶点称为相邻顶点。...回路:第一个顶点和最后一个顶点相同的路径称为回路。比如 0 1 5 6 3 0。 无向图 上面的图就是一张无向图,因为所有的边都没有方向。...和其他数据结构一样,需要通过某种算法来遍历图结构中每一个数据。...两种算法的思想 BFS 基于队列,入队列的顶点先被探索。 DFS 基于栈,通过将顶点存入栈中,顶点是沿着路径被探索的,存在新的相邻顶点就去访问。

    69320

    数据结构

    45.png 自环:即一条链接一个顶点和自身的边 平行边:连接同一对顶点的两条边 52.png 图的分类 无向图: 边没有方向的图称为无向图,边的作用仅仅是连接两个顶点,没有其他含义 有向图: 边不仅连接两个顶点...:是依附于这个顶点的边的个数 子图:一幅图中,所有边的子集组成的图,包含这些边的依附的顶点 路径:是由边顺序链接的一系列的顶点组成 环:至少含有一条边,且终点和起来相同的路径 连通图:如果图中任意一个顶点都存在一条路径到达另外一个顶点...,那么这幅图就称为连通图 连通子图:组成连通图的非连通图 48.png 欧拉七桥 欧拉开创了新的学科:图论 49.png 图的存储结构 图是由顶点和边构成的,所以在图里边,要存储的图形结构的信息,无非就是存储图的顶点和图的边...,并且要跳过已经探索的顶点 遍历完这个顶点以后,将这个顶点标志为已经探索 循环在队列中探索下一个顶点 深度优先的遍历过程 广度优先使用的是队列,深度优先的原理:使用递归 从某一个顶点开始查找,并且将这个顶点标记为已经发现...(灰色) 从这个顶点开始探索其他的全部的顶点,并且跳过已经发现的顶点 递归返回,继续探索下一个路径的最深顶点 代码案例 利用邻接矩阵(边数组)创建图 let scanf = require('scanf

    93320

    数据结构

    45.png 自环:即一条链接一个顶点和自身的边 平行边:连接同一对顶点的两条边 52.png 图的分类 无向图: 边没有方向的图称为无向图,边的作用仅仅是连接两个顶点,没有其他含义 有向图: 边不仅连接两个顶点...:是依附于这个顶点的边的个数 子图:一幅图中,所有边的子集组成的图,包含这些边的依附的顶点 路径:是由边顺序链接的一系列的顶点组成 环:至少含有一条边,且终点和起来相同的路径 连通图:如果图中任意一个顶点都存在一条路径到达另外一个顶点...,那么这幅图就称为连通图 连通子图:组成连通图的非连通图 48.png 欧拉七桥 欧拉开创了新的学科:图论 49.png 图的存储结构 图是由顶点和边构成的,所以在图里边,要存储的图形结构的信息,无非就是存储图的顶点和图的边...,并且要跳过已经探索的顶点 遍历完这个顶点以后,将这个顶点标志为已经探索 循环在队列中探索下一个顶点 深度优先的遍历过程 广度优先使用的是队列,深度优先的原理:使用递归 从某一个顶点开始查找,并且将这个顶点标记为已经发现...(灰色) 从这个顶点开始探索其他的全部的顶点,并且跳过已经发现的顶点 递归返回,继续探索下一个路径的最深顶点 代码案例 利用邻接矩阵(边数组)创建图 let scanf = require('scanf

    1.1K20

    【数据结构与算法】详解什么是图结构,并用代码手动实现一个图结构

    图 是由顶点的集合和边的集合组成的。...,因此我们还是要先来介绍一些下文会提到的图结构中的术语 术语 含义 顶点 图中的某个结点 边 顶点之间连线 相邻顶点 由同一条边连接在一起的顶点 度 一个顶点的相邻顶点个数 简单路径 由一个顶点到另一个顶点的路线...,且没有重复经过顶点 回路 第一个顶点和最后一个顶点的相同的路径 无向图 图中所有的边都没有方向 有向图 图中所有的边都有方向 无权图 图中的边没有权重值 有权图 图中的边带有一定的权重值 我们再来看个图的例子...我们在文章末尾封装图结构时,也会用到这种表示方法 四、遍历搜索 在图结构中,存在着两种遍历搜索的方式,分别是 广度优先搜索 和 深度优先搜索 在介绍这两种搜索方式前,我们先来看一个例子 ?...: 先将所有的顶点颜色初始化为白色 从给定的第一个顶点开始搜索,即将第一个顶点添加到队列中,并将第一个顶点标记为黑色 从队列中取出一个顶点,查找该顶点的未被访问过的相邻顶点,将其添加到队列的队尾位置,并将这些顶点标记未黑色

    55120

    PHP数据结构(九) ——图的定义、存储与两种方式遍历

    3、有向图:由顶点和弧组成的图;无向图:由顶点和边组成的图。 4、完全有向图:n个顶点有n(n-1)个弧;完全无向图:n个顶点有n(n-1)/2个边。...7、子图:图的边和顶点都被含于另一个图,则该图是另一个图的子图。...12、路径是指从顶点A经过若干边或弧抵达顶点B,经过的边或弧的数目称为路径的长度,起止点相同的路径称为回路或环。...3)有两种方式进行遍历,深度优先搜索和广度优先搜索。...3、广度优先算法:采用队列(先进先出FIFO)的思想,遍历节点时,被遍历的节点出队列,再遍历其子节点。关键要点和深度优先算法类似。 PHP源码如下: <?

    1.9K80
    领券