图的简单介绍

104 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第18天,点击查看活动详情

看下图的样例

image.png

image.png

  1. 图根据边是否有方向,分为无向图、有向图。

  2. 根据两个点之间是否完全链接可分为,无向完全图、有向完全图

  3. 权值 有向图里面连接点之间可以有权值

  4. 度 在无向图中,某个顶点的度是邻接到该顶点的边(或弧)的数目。

    在有向图中,度还有"入度"和"出度"之分。某个顶点的入度,是指以该顶点为终点的边的数目。而顶点的出度,则是指以该顶点为起点的边的数目。 顶点的度=入度+出度。

图的存储

邻接矩阵

  1. 邻接矩阵是用数组来表示的
  2. 节点一维数组
  3. 节点到节点的关系二维数组
private char[] mVexs;       // 顶点集合
private int[][] mMatrix;    // 邻接矩阵
  1. 上面的无向图可以用如下标识的 节点: {A,B,C,D,E,F}

关系: { {'A', 'B'}, {'A', 'C'}, {'B', 'C'}, {'B', 'E'}, {'B', 'F'}, {'C', 'D'}, {'C', 'E'}, {'C', 'F'}, {'E', 'F'}, };

  1. 无向图的矩阵表示填充0(无连接),1(有连接)
  2. 有向图的矩阵表示则填充权值,最大值可以表示为不连通的 A B C D E F

A 0 1 1 0 0 0

B 0 0 1 0 1 1

C 0 0 0 1 1 1

D 0 0 1 0 0 0

E 0 1 1 0 0 1

F 0 0 1 1 0 0

邻接表

  1. 邻接表是拉链表实现的
    // 邻接表中表对应的链表的顶点
    private class ENode {
        int ivex;       // 该边所指向的顶点的位置
        ENode nextEdge; // 指向下一条弧的指针
    }

    // 邻接表中表的顶点
    private class VNode {
        char data;          // 顶点信息
        ENode firstEdge;    // 指向第一条依附该顶点的弧
    };

    private VNode[] mVexs;  // 顶点数组

上面的无向图可以用如下表示的

0(A): 1(B) 2(C)

1(B): 2(C) 4(E) 5(F)

2(C): 0(A) 1(B) 3(D) 4(E) 5(F)

3(D): 2(C)

4(E): 1(B) 2(C) 5(F)

5(F) 1(B) 2(C) 4(E)

有向图的连接表表示法

image.png