数据结构与算法 — 认识图结构、图的表示、图结构的实现、图的遍历

目录

一、初识图结构

1.什么是图

2.图的特点

  3.图的术语

        (1).顶点

        (2).边

        (3).相邻顶点

        (4).度

        (5).路径

        (6).无向图

        (7).有向图

        (8).无权图和带权图

二. 图的表示

  1.顶点表示

  2.邻接矩阵

  3.邻接表

三. 图结构的实现

  1.封装图结构

  2.添加顶点的方法

  3.添加边的方法

  4.toString()方法

四、图的遍历 

  1.遍历的方式

        (1).图的遍历思想

        (2).遍历的注意点

        (3).两种算法的思想

  2.广度优先搜索

        (1).广度优先搜索算法的思路

        (2).广度优先搜索的实现

  3.深度优先搜索

        (1).深度优先搜索的思路

        (2).深度优先搜索算法的实现


一、初识图结构

1.什么是图

        图是一种与树有些相似的数据结构,实际上,在数学的概念上,树是图的一种。

树可以用来模拟很多现实的数据结构,比如: 家谱、公司组织架构等等。同时,可以使用地铁地图来模拟图:

        上面的结点(其实图中叫顶点Vertex)之间的关系,是不能使用树来表示(几叉树都不可以),这个时候,就可以使用图来模拟它们。

2.图的特点

一组顶点:通常用 V (Vertex) 表示顶点的集合

一组边:通常用 E (Edge) 表示边的集合

边是顶点和顶点之间的连线

边可以是有向的,也可以是无向的。(比如A --- B,通常表示无向。 A --> B,通常表示有向)

  3.图的术语

下图是一个抽象出来的图:

        (1).顶点

        顶点表示图中的一个结点。

        比如地铁站中某个站、多个村庄中的某个村庄、互联网中的某台主机、人际关系中的人。

        (2).边

        边表示顶点和顶点之间的连线。

        比如地铁站中两个站点之间的直接连线,就是一个边。

        注意: 这里的边不要叫做路径,路径有其他的概念

        在上面的图中: 0 - 1有一条边, 1 - 2有一条边, 0 - 2没有边.

        (3).相邻顶点

        由一条边连接在一起的顶点称为相邻顶点。

        比如0 - 1是相邻的, 0 - 3是相邻的. 0 - 2是不相邻的

        (4).度

        一个顶点的度是相邻顶点的数量。

比如0顶点和其他两个顶点相连, 0顶点的度是2

比如1顶点和其他四个顶点相连, 1顶点的度是4

        (5).路径

        路径是顶点v1, v2..., vn的一个连续序列,比如上图中0 1 5 9就是一条路径.

   1.简单路径: 简单路径要求不包含重复的顶点. 比如 0 1 5 9是一条简单路径.

   2.回路: 第一个顶点和最后一个顶点相同的路径称为回路. 比如 0 1 5 6 3 0

        (6).无向图

        上面的图就是一张无向图,因为所有的边都没有方向。

比如 0 - 1之间有变, 那么说明这条边可以保证 0 -> 1, 也可以保证 1 -> 0.

        (7).有向图

        有向图表示的图中的边是有方向的。

比如 0 -> 1, 不能保证一定可以 1 -> 0, 要根据方向来定.

        (8).无权图和带权图

        1.无权图

        上面的图就是一张无权图(边没有携带权重)

我们上面的图中的边是没有任何意义的, 不能收 0 - 1的边, 比4 - 9的边更远或者用的时间更长.

        2.带权图

        带权图表示边有一定的权重。

这里的权重可以是任意希望表示的数据,比如距离或者花费的时间或者票价.

下图是一张有向和带权的图:

二. 图的表示

        一个图包含很多顶点,另外包含顶点和顶点之间的连线(边),这两个都是非常重要的图信息。

  1.顶点表示

        顶点的表示相对简单,上面的顶点抽象成了1 2 3 4, 也可以抽象成A B C D。这些A B C D可以使用一个数组来存储起来(存储所有的顶点)。当然, A, B, C, D有可能还表示其他含义的数据(比如地铁站的名字),这个时候,可以另外创建一个数组,

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值