📜  图及其表示(1)

📅  最后修改于: 2023-12-03 15:23:05.119000             🧑  作者: Mango

图及其表示

一、图的定义

图(Graph)是一种表示事物的模型,它由节点和边组成。图和树相似,但图的边是没有方向的,而树的边是有方向的。

图可以用来表示网页链接、社交网络、路线图等等。

图中的节点(Node)有时也称为顶点(Vertex),边(Edge)有时也称为弧(Arc)。

二、图的表示

图可以用多种方式进行表示,以下是常见的几种方式:

  1. 邻接矩阵

邻接矩阵是一个二维数组,其中第 i 行第 j 列的值为 1 表示节点 i 与节点 j 之间有边,值为 0 表示没有边。

如下图的邻接矩阵为:

    0 1 2 3
  0 0 1 1 0
  1 1 0 1 1
  2 1 1 0 1
  3 0 1 1 0
  1. 邻接表

邻接表采用链表的方式存储每个节点的邻居节点。可以用数组加链表的方式来实现。数组的下标表示节点,每个元素为一个链表,链表中存储该节点的所有邻居节点。

如下图的邻接表为:

0 -> 1 -> 2
1 -> 0 -> 2 -> 3
2 -> 0 -> 1 -> 3
3 -> 1 -> 2
  1. 关联矩阵

关联矩阵是一个二维数组,其中第 i 行第 j 列的值为 1 表示节点 i 与边 j 之间有关联(4 号边是从节点 1 到节点 3 的边,因此节点 1 和边 4 之间有关联)。

如下图的关联矩阵为:

    0 1 2 3 4 5
  0 1 0 0 0 0 0
  1 1 1 0 0 1 0
  2 0 1 1 0 0 0
  3 0 0 1 1 0 1

三、图的遍历

图的遍历可以分为深度优先遍历和广度优先遍历两种方式。

  1. 深度优先遍历(DFS)

深度优先遍历首先访问一个节点,然后依次遍历该节点的邻居节点,每个邻居节点都要进行深度优先遍历,直到所有节点都被访问过。

实现深度优先遍历可以使用递归或栈。

  1. 广度优先遍历(BFS)

广度优先遍历首先访问一个节点,然后依次访问该节点的邻居节点,每访问一个邻居节点就将该邻居节点加入队列中,直到所有节点都被访问过。

实现广度优先遍历可以使用队列。

四、总结

本文介绍了图的定义、常见的图的表示方法以及图的遍历方式。

图在计算机科学中有广泛的应用,如搜索引擎、人脸识别、电影推荐等等。对图的理解和掌握,对计算机科学的学习和应用都具有重要的意义。