图的定义:

  一个图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算法)

 
posted on 2014-04-06 12:36  水目沾  阅读(832)  评论(0编辑  收藏  举报