zoukankan      html  css  js  c++  java
  • 图的基本知识

    1.简介

    图(Graph)是由顶点的有穷非空集合和顶点之间的边的集合组成,通常表示为:G(V,E),G表示一个图,V是图G中顶点的集合,E是图G中边的集合。

    图是一种复杂的非线性结构,在图结构中,每个元素都可以有零个多个前驱,也可以有零个或多个后继,元素之间的关系是任意的。

    2.分类

    图分无向图和有向图

    无向图:由顶点和边构成;

    有向图:由顶点和弧(有向边)构成,弧分弧头和弧尾

    多重图:关联一对顶点的无向边(或有向边,边的方向一致)多于1条(称这些边为平行边)

    简单图:既不含平行边也不含环的图成为简单图

    (有向)完全图:如果任意两个顶点之间都存在边叫完全图,有向的边叫有向完全图

    连通图:在无向图G中,任意两个顶点是相通的就是连通图

    网:图中的边带权值的话,叫网

    3.图的顶点和边

    顶点的度:顶点关联边的数目

    有向图中:入度,方向指向顶点的边;出度,方向背向顶点的边

    路径长度:路径上边或弧的数目

    4.存储结构

    4.1.邻接矩阵

    图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。

    实际中,我们发现对于边数相对顶点较少的图,这种结构存在对存储空间的极大浪费。

    4.2.邻接表

    图的邻接表存储方式是用一个一维数组存顶点,数组中每一项还需要存储指向下一个邻接点的指针,以便于查找该顶点的边信息。图中每个顶点的所有邻接点构成一个线性表,由于邻接点不定,故用单链表存储。

    5.遍历

    5.1.深度优先遍历

    深度优先遍历(DFS,也称深度优先搜索):假设给定图G的初态是所有顶点均未曾访问过。在图G中任选一点Vi为初始出发点(源点),则深度优先遍历如下:首先访问出发点Vi,并将其标记为已访问过;然后依次从Vi出发探索Vi的每个邻接点Wj。若Wj未曾访问过,则以Wj为新的出发点继续进行深度优先遍历,直至图中所有与源点Vi有路径相通的顶点均已被访问为止。如此时图中任有未被访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中所有顶点均已被访问为止。

    5.2.广度优先遍历

    广度优先遍历(BFS,也称广度优先搜索):这是一种盲目搜索法,它会系统的展开并检查图中的所有节点,不考虑搜索目标,一层一层逐层向下遍历,直至遍历完整张图。

    参考资料:《大话数据结构》

  • 相关阅读:
    自定义函数
    取小数的有效值函数
    数据恢复bak
    脚本启动windows服务
    创建表
    PostgreSQL和SQL SERVER的数据库差异
    vs2019莫名自动退出调试状态
    postgresql 设置调试
    Google Web字体,让你的网页更迷人
    翻译:观察者模式—使用JavaScript实现
  • 原文地址:https://www.cnblogs.com/xuchaoi/p/7843978.html
Copyright © 2011-2022 走看看