图遍历

图的遍历

会有一股神秘感。 提交于 2020-02-03 04:38:14
图的遍历和树的遍历类似,希望从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程就叫图的遍历。 对于图的遍历来说,如何避免因回路陷入死循环,就需要科学地设计遍历方案,通过有两种遍历次序方案:深度优先遍历和广度优先遍历。 1. 深度优先遍历 深度优先遍历,也有称为深度优先搜索,简称DFS。其实,就像是一棵树的前序遍历。 它从图中某个结点v出发,访问此顶点,然后从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到。 若图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中的所有顶点都被访问到为止。 我们用邻接矩阵的方式,则代码如下所示。 #define MAXVEX 100 //最大顶点数 typedef int Boolean; //Boolean 是布尔类型,其值是TRUE 或FALSE Boolean visited[MAXVEX]; //访问标志数组 #define TRUE 1 #define FALSE 0 //邻接矩阵的深度优先递归算法 void DFS(Graph g, int i) { int j; visited[i] = TRUE; printf("%c ", g.vexs[i]); //打印顶点,也可以其他操作 for(j = 0; j < g.numVertexes; j++)

Gremlin基本使用

痞子三分冷 提交于 2019-12-08 05:06:23
Gremlin简介 Gremlin是 Apache TinkerPop 框架下的图遍历语言。Gremlin是一种函数式数据流语言,可以使得用户使用简洁的方式表述复杂的属性图(property graph)的遍历或查询。每个Gremlin遍历由一系列步骤(可能存在嵌套)组成,每一步都在数据流(data stream)上执行一个原子操作。 Gremlin包括三个基本的操作: map-step 对数据流中的对象进行转换; filter-step 对数据流中的对象就行过滤; sideEffect-step 对数据流进行计算统计; 以下是Gremlin在一些场景中的具体应用: 1.查找Gremlin朋友的朋友 g. V ().has( "name" , "gremlin" ). out( "knows" ). out( "knows" ). values( "name" ) 2.查找那些由两个朋友共同创建的项目 g.V().match( as ( "a" ). out ( "knows" ). as ( "b" ), as ( "a" ). out ( "created" ). as ( "c" ), as ( "b" ). out ( "created" ). as ( "c" ), as ( "c" ). in ( "created" ).count(). is ( 2 )).

Gremlin基本使用

匿名 (未验证) 提交于 2019-12-03 00:26:01
Gremlin简介 Gremlin是 Apache TinkerPop Gremlin包括三个基本的操作: map-step 对数据流中的对象进行转换; filter-step 对数据流中的对象就行过滤; sideEffect-step 对数据流进行计算统计; 以下是Gremlin在一些场景中的具体应用: 1.查找Gremlin朋友的朋友 g. V ().has( "name" , "gremlin" ). out( "knows" ). out( "knows" ). values( "name" ) 2.查找那些由两个朋友共同创建的项目 g.V().match( as ( "a" ). out ( "knows" ). as ( "b" ), as ( "a" ). out ( "created" ). as ( "c" ), as ( "b" ). out ( "created" ). as ( "c" ), as ( "c" ). in ( "created" ).count(). is ( 2 )). select ( "c" ).by( "name" ) 3.给出Gremlin的所有上司,直至CEO g.V().has( "name" , "gremlin" ). repeat(in( "manages" )). until (has( "title" , "ceo"

数据结构(六)图

耗尽温柔 提交于 2019-11-29 14:20:48
术语 实现 算法 一、概述 存在对应关系就连边,邻接关系 顶点与顶点之间的关系 参与定义邻接关系的每个顶点,与这个邻接关系的关系称作关联关系 顶点与相关的某条边的关系 本章忽略下面这种边 无向图/有向图 所有边均无方向的图,即无向图undigrapy 反之,有向图digraph中均为有向边directed edge,u、v分别称作边(u, v)的尾(tail)、头(head) 混合图 路径/环路 有向无环图DAG,在有向图中不包含任何的环路 简单路径和简单环路,都不包含重复的点 欧拉环路,覆盖了图中所有的点 哈密尔顿环路,经过所有顶点,且只经过一次的环路 二、邻接矩阵 在计算机中如何以数据结构的方式实现图? Graph模板类 template <typename Tv, typename Te> class Graph { // 顶点类型、边类型 private: void reset() { // 所有顶点、边的辅助信息 for (int i = 0; i < n; i++) { // 顶点 status(i) = UNDISCOVERED; dTime(i) = fTime(i) = -1; parent(i) = -1; priority(i) = INT_MAX; for (int j = 0; j < n; j++) // 边 if (exists(i, j))