zoukankan      html  css  js  c++  java
  • 数据结构之图(图的简介)

    图的定义:

      一个图G = (V,E)由顶点(vertex)集 V 合边(edge)集 E 组成。每条边(v,w)就是一个点对,其中v,w ∈ V。有时也把边称作弧。如果点对是有序的,那么图就叫做有向图。顶点 v 和 w 领接边 (v,w) ∈ E。在一个具有边(v,w)从而具有边(w,v)的无向图,w和v邻接那v和w也邻接。

    图的基本术语:

    1. 阶(Order):图G中顶集V的大小称作图G的阶。
    2. 子图(Sub-Graph):G'称作图G=(V,E)的子图,当图G'=(V',E'),且V‘包含于V,E’包含于E。每个图都是本身的子图。
    3. 生成子图(Spanning Sub-Graph):指满足条件V(G') = V(G)的G的子图G。
    4. 度(Degree):一个顶点的度是指与该边相关联的边的条数,顶点v的度记作d(v)。
    5. 入度(In-degree)和出度(Out-degree):对于有向图来说,一个顶点的度可细分为入度和出度。一个顶点的入度是指与其关联的各边之中,以其为终点的边数;出度则是相对的概念,指以该顶点为起点的边数。
    6. 自环(Loop):若一条边的两个顶点为同一顶点,则此边称作自环。
    7. 路径(Path):从u到v的一条路径是指一个序列v0,e1,v1,e2,v2,...ek,vk,其中ei的顶点为vi及vi - 1,k称作路径的长度。如果它的起止顶点相同,该路径是“闭”的,反之,则称为“开”的。一条路径称为一简单路径(simple path),如果路径中除起始与终止顶点可以重合外,所有顶点两两不等
    8. 连通图:如果在一个无向图中从每一个顶点到每个其他顶点都存在一条路径,则称该无向图是联通的,具有这样的有向图成为强连通图。

    图的存储:

      我们可以用两种方法来存储图的,一种是邻接链表一种是邻接矩阵。但是有向图和无向图又有所不同,如下两幅图:

      

      由上面两幅图我们可以看出无论是有向图还是无向图,邻接矩阵表示法所需要的存储空间都是 O(V^2)(v是顶点),而邻接链表是O(V+E)(V是顶点,E是边)。当在图顶点的个数非常多,而边又很少的时候,采用邻接矩阵会浪费大量的存储空间,此时用邻接链表表示法比较好。当图的规模比较小的时候我们可以采用邻接矩阵表示法来存储,因为邻接矩阵有很多优点,比如可以再O(1)时间内判断两条边是否有边。

    图的基本操作:

    (1)创建一个图结构 CreateGraph(G)
    (2)检索给定顶点 LocateVex(G,elem)
    (3)获取图中某个顶点 GetVex(G,v)
    (4)为图中顶点赋值 PutVex(G,v,value)
    (5)返回第一个邻接点 FirstAdjVex(G,v)
    (6)返回下一个邻接点 NextAdjVex(G,v,w)
    (7)插入一个顶点 InsertVex(G,v)
    (8)删除一个顶点 DeleteVex(G,v)
    (9)插入一条边 InsertEdge(G,v,w)
    (10)删除一条边 DeleteEdge(G,v,w)
    (11)遍历图 Traverse(G,v)

    图的高级算法:

      1.最小生成树(Prim和kruskal算法)

      2.单元路径最短(Dijkstra算法)

      3.所有点对的最短路径(Floyd-Warshall算法)

     
  • 相关阅读:
    windows下安装rabbitmq
    selectors
    修改Docker默认镜像和容器的存储位置
    eclipse配置jdk的src.zip源代码步骤
    Zookeeper WINDOWS 安装配置
    zookeeper windows 入门安装和测试
    zookeeper集群搭建(windows环境下)
    ant使用指南详细入门教程
    linux查看系统版本和系统位数
    suse linux 命令
  • 原文地址:https://www.cnblogs.com/zhuwbox/p/3644663.html
Copyright © 2011-2022 走看看