数据结构——图(1)——图的简单介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/redRnt/article/details/82150805

图的简介

我们先回顾一下之前介绍的树的概念,在树的定义中,每个节点只能有一个父类,并且树中不能出现有环形。但是你可曾想过,当一棵树没有任何规则的时候,会发生什么吗?
现在,我们给图(graph)下一个定义:
图,是一种用节点和边来表示相互关系的数学模型。(A graph is a mathematical structure for representing relationships using nodes and edges)
其实,用句不是很严谨的话来说,图可以看成是没有任何限制的树(比如,可以有环状,可以有多种关系等等)。
下图是图但它们不是一棵树:
这里写图片描述
这里写图片描述
从图二中我们也可以看出,图没有固定的root。

图的基本结构

我们刚刚说了,图是由一系列的节点通过一系列的边连接在一起的,所以大体的图的数据结构可以为:

struct Graph{
    set<Node *> nodes;
    set<Edge*> edges;
};

而具体的节点和边我们可以这样表示:

struct Node{ //节点的数据结构
    string value; //节点中的数值
    vector<Edge *> edges;//连接该节点的边
};
struct Edge{//边的数据结构
    Node * start;//边的起点
    Node * end;//边的终点
};

我们经常在图的边上添加一些数值,成为边的权重,用weight表示,于是我们的边上的数据结构也可以这样定义为:

struct Edge{
    Node * start;//边的起点
    Node * end;//边的终点
    double weight; //权
};

与图相关的一些概念

有向图与无向图

在离散数学课程中,我们学过图这个基本的数学结构还有它的一些概念,现在回顾一下:
这里写图片描述
下图中,每个表情可以看做是一个节点(也常称为顶点),而黑色的线将每个节点连接起来,称为边。
如图中的每一条边,如果有表明方向,有起点终点,这样的图我们称为有向图Directed Graph即有方向的图)
这里写图片描述
相反如果图中的边没有方向性,那么我们就称这样的图为无向图Undirected Graph即没有方向的图)
这里写图片描述
下图就是有向图跟无向图的区别
这里写图片描述

权重与权重图

权重:与给定边之间的相关的成本。
例如航空公司航班图表,按城市之间的里程加权:
这里写图片描述

先决条件图

顾名思义,前面的事物要建立在后面的基础上
这里写图片描述

与图相关的一些术语

下面看一副图
这里写图片描述

  • 路径(path):从某个顶点到另一个顶点之间的路径,可以用经过的点或者经过的边来表示。例如从V到Z,所经过的路径可以表示为:
    {b, h} 或者{V, X, Z}
  • 路径长度(path length):路径中包含的节点数或者边的数量
  • 邻居(neighbor):通过一条边直接相连的两个节点,称为邻居,例如图中的V和X
  • 环(cycle):路径的起点跟终点都是在同一个节点中的路径。例如(红色线条)和蓝色线条
    路径:{b, g, f, c, a} 或者 {V, X, Y, W, U, V},还有 .{c, d, a} 或者{U, W, V, U}.
    这里写图片描述
  • 无环图:图中不包含任何的环状的图
  • 循环(loop):连接自身顶点的边。许多图中是不允许包含有循环的
    这里写图片描述
  • 可达(reachable):如果存在一条路径,使得a能够到达b,就称a到b可达
  • 连通(connect):如果图中每一个顶点都能相互可达,那么我们就称这图是连通的,称为连通图
  • 完全图(complete):如果图中的 每个顶点都有一条边可以直达每个顶点,那么称这样的图为完全图。
    这里写图片描述

猜你喜欢

转载自blog.csdn.net/redRnt/article/details/82150805