在图形结构中,结点之间的关系可以是任意的。

一、图

  图由定点(vertex)和边(edge)两个有限集合组成:

Graph=(V,R)

  V是定点集,R={E},E是边集。

  有向图(directed network):从一个顶点指向另一个顶点。用有序对<u,v>表示

  无向图:用无序对(u,v)代替有序对。

  有向网:有向图的边上有正的权值。

  无向网:无向图的边上有正的权值。

  n为图中顶点数,e为图中边数,不考虑顶点到自身的边:

  (1)对无向图而言, e在[0,n(n+1)/2]范围内。满边称为完全图;

  (2)对有向图,e在[0,n(n-1)],满边称为有向完全图。

  有较少条边的图称为稀疏图,有较多条边的图称为稠密图。

  图中顶点的度degree:

  无向图中即为与顶点相关联的边的数目;

  有向图中:顶点有入度和出度,顶点的度数为两者之和。

  图中路径的定义:顶点序列中,任意序列相邻顶点的构成的边都存在,则称顶点序列构成一条长度为n-1的路径,路径长度是指包含的边的条数。

  如果路径上各个顶点都不同,则为简单路径。

  路径中如果首尾的顶点是同一个,则构成回路。

  一条回路中,除了起点与终点相同外,其它顶点都不相同,则为简单回路,或简单环

  一个无向图中任意两个不同的顶点都存在从一个顶点到另一个顶点的路径,则称此无向图是联通的(connected),无向图的极大联通子图称为联通分量

  对于有向图,如果一个有向图中任意两个不同的顶点u和v,都存在从顶点u到顶点v的路径,则称此有向图是强连通的,有向图的极大联通子图称为强连通分量。

  连通图的极小连通子图称为连通图的生成树,生成树包含图中全部n个顶点,只有n-1条边,并且任加新一条边,必将构成回路。

二、图的存储

  最常用的两种:邻接矩阵和邻接表。

三、图的遍历

图的遍历算法一般是从一个起始顶点出发,试图访问全部顶点,则必须解决:

  (1) 从起点出发可能到达不了所有其它顶点(如非连接图);

  (2) 有些图存在回路,必须确定算法不会因回路而陷入死循环。

  解决办法是,为图的每个顶点保留一个标志(tag),在算法开始时,所有顶点的标志设置为false,遍历过程中,如某个顶点被访问,则置为true。后面再遇到tag为true 的点,就不访问,避免陷入死循环。

  若图是不联通的,则还有未被访问的顶点,这些顶点的标志值为false,这时可以从某个未被访问到的顶点开始继续搜索。

深度优先搜索DFS:

搜索过程中,每当访问某个顶点V后,DFS将递归地访问它的所有未被访问到的邻接的顶点,实际结果是沿着图的某一分支进行搜索,直到末端,再进行回溯,沿另一分支进行搜索。结果将产生一棵深度优先搜索树。

时间复杂度与图的存储结构有关,主要花费在对每个顶点寻找邻接点的过程上。

广度优先搜索BFS:

以顶点V为起点,由近至远依次访问和V有路径相通且长度为1,2,…的顶点,知道所有被访问的顶点的邻接点都被访问完。若这时图中还有未被访问的顶点,选择一个未被访问的顶点作为起始点继续进行搜索,直到图中所有顶点都被访问完为止。

时间复杂度是一样的。

四、连通无向网的最小代价生成树

  最小代价生成树MST,对于一个给定连通网Net,最小代价生成树包括Net中所有顶点和部分边,且满足下列条件:

  (1)    MST边的条数是顶点个数减1,并且保证MST是连通的;

  (2)    MST边上的权值之和最小。

  构造最小代价生成树的两种算法:

  Prim算法——直到有n-1条边(从顶点出发);

  Kruskal算法——直到所有的顶点在同一颗树上(从边入手);

五、有向无环图(Direxted Acyclic Graph)

判断有向无环图:拓扑排序or深度优先搜索,DFS(v)结束之前出现一条从顶点u到v的回边,则必定存在包含顶点u和v的回路。

  1、  拓扑排序

  2、  关键路径

六、最短路径

  1、 单源点最短路径问题

  2、 所有顶点之间的最短路径问题

数据结构(四) 图(Graph)的更多相关文章

  1. 算法与数据结构基础 - 图(Graph)

    图基础 图(Graph)应用广泛,程序中可用邻接表和邻接矩阵表示图.依据不同维度,图可以分为有向图/无向图.有权图/无权图.连通图/非连通图.循环图/非循环图,有向图中的顶点具有入度/出度的概念. 面 ...

  2. 算法与数据结构(四) 图的物理存储结构与深搜、广搜(Swift版)

    开门见山,本篇博客就介绍图相关的东西.图其实就是树结构的升级版.上篇博客我们聊了树的一种,在后边的博客中我们还会介绍其他类型的树,比如红黑树,B树等等,以及这些树结构的应用.本篇博客我们就讲图的存储结 ...

  3. 纸上谈兵: 图 (graph)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 图(graph)是一种比较松散的数据结构.它有一些节点(vertice),在某些节 ...

  4. python数据结构之图的实现

    python数据结构之图的实现,官方有一篇文章介绍,http://www.python.org/doc/essays/graphs.html 下面简要的介绍下: 比如有这么一张图: A -> B ...

  5. 学习javascript数据结构(四)——树

    前言 总括: 本文讲解了数据结构中的[树]的概念,尽可能通俗易懂的解释树这种数据结构的概念,使用javascript实现了树,如有纰漏,欢迎批评指正. 原文博客地址:学习javascript数据结构( ...

  6. 20162327WJH实验四——图的实现与应用

    20162327WJH实验四--图的实现与应用 实 验 报 告 课程:程序设计与数据结构 班级: 1623 姓名: 王旌含 学号:20162327 成绩: 指导教师:娄嘉鹏 王志强 实验日期:11月2 ...

  7. 利用python+graphviz绘制数据结构关系图和指定目录下头文件包含关系图

    作为一名linux系统下的C语言开发,日常工作中经常遇到两个问题: 一是分析代码过程中,各种数据结构互相关联,只通过代码很难理清系统中所有结构体的整体架构,影响代码消化的效率; 二是多层头文件嵌套包含 ...

  8. python数据结构之图的实现方法

    python数据结构之图的实现方法 本文实例讲述了python数据结构之图的实现方法.分享给大家供大家参考.具体如下: 下面简要的介绍下: 比如有这么一张图:     A -> B     A ...

  9. python数据结构之图深度优先和广度优先实例详解

    本文实例讲述了python数据结构之图深度优先和广度优先用法.分享给大家供大家参考.具体如下: 首先有一个概念:回溯 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标.但当探索到 ...

  10. hdu 1233:还是畅通工程(数据结构,图,最小生成树,普里姆(Prim)算法)

    还是畅通工程 Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

随机推荐

  1. nmap脚本nse的使用

    nmap脚本(nse)使用总结 0x01 nmap按脚本分类扫描 nmap脚本主要分为以下几类,在扫描时可根据需要设置--script=类别这种方式进行比较笼统的扫描: auth: 负责处理鉴权证书( ...

  2. python递归获取目录下指定文件

    获取一个目录下所有指定格式的文件是实际生产中常见需求. import os #递归获取一个目录下所有的指定格式的文件 def get_jsonfile(path,file_list): dir_lis ...

  3. Leetcode题目33.搜索旋转排序数组(中等)

    题目描述: 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值,如果数组中存在 ...

  4. Java中的基本数据类型和引用类型

    一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768 ...

  5. OUC_Summer Training_ DIV2_#5

    这是做的最好的一次了一共做了4道题  嘻嘻~ A - Game Outcome Time Limit:2000MS     Memory Limit:262144KB     64bit IO For ...

  6. Spring Boot 线程池的使用和扩展 - 转载

    转载:http://blog.csdn.net/boling_cavalry/article/details/79120268 1.实战环境 windowns10: jdk1.8: springboo ...

  7. ActivityLifecycleCallbacks

    public class ActivityLifecycleCallbacks implements Application.ActivityLifecycleCallbacks, ActivityS ...

  8. python 面对对象 类(继承, 多态)

    继承,继承其它实例化样本的属性和方法,需要在声明里重新定义和使用 class School(object): def __init__(self, name, addr): self.name = n ...

  9. 3709: [PA2014]Bohater

    3709: [PA2014]Bohater 或者:Bohater 题解 好狠啊这个题 z 要开 long long ,可能算掉血回血的时候会爆 long long 吧 首先把能回血的怪打死(不然你后面 ...

  10. 【Web】jquery合并单元格

    合并单元格的情况,在开发中还是比较多见的,以下仅介绍合并行的情况. 原来的table效果 效果如下: 代码如下: <!DOCTYPE html> <html xmlns=" ...