图的基本概念:多对多关系

  • 图(graph)是一种网状数据结构,图是由非空的顶点集合和一个描述顶点之间关系的集合组成
  • 其形式化的定义如下
    Graph = (V, E)
    V = {x|x ∈ \in 某个数据对象}
    E = {<u, v>| P(u, v) ∧ \wedge (u, v ∈ \in V)}
    V是具有相同特性的数据元素的集合,V中的数据元素通常称为顶点(Vertex),E是两个顶点之间关系的集合。P(u,v)表示u和v之间有特定的关联属性
  • 若<u,v> ∈ \in E,则<u,v>表示从顶点u到顶点v的一条弧,并称u为弧尾或起始点,称v为弧头或终止点,此时途中的顶点之间的连线是有方向的,这样的图称为有向图(directed graph)
  • 若<u,v> ∈ \in E,则必有<v,u> ∈ \in E,则关系E是对称的,此时可以使用一个无序对(u,v)来代替两个有序对,它表示顶点u和顶点v之间的一条边,此时图中顶点之间的连线是没有方向的,这种图称为无向图(undirected graph)
  • 在无向图和有向图V中的元素都称为顶点,而顶点之间的关系却有不同的称谓,即弧或变,为避免麻烦,在不影响理解的前提下,我们统一的将它们称为边(edge),并且我们还约定顶点集与边集是有限的,并记顶点与边的数量为|V|和|E|
    在这里插入图片描述

无向图实际上也是有向图,是双向图

在这里插入图片描述
加权图:

  • 在实际应用中,图不但需要表示元素之间是否存在某种关系
  • 而且图的边往往与具有一定实际意义的数有关,即每条边都有与它行管的实数,称谓权
  • 这些权值可以表示从一个顶点到另一个顶点的距离或消耗等信息,在本章中假设边的权均为正数
  • 这种边上具有权值的图称为带权图(weighted graph)

图的存储

  • 邻接矩阵:二维数组 顺序结构
    在这里插入图片描述

  • 邻接表:链表 链式存储结构
    在这里插入图片描述
    图的遍历

  • 图的遍历就是从图中某个顶点出发,按某种方法对图中所有顶点访问且仅访问一次

  • 图的遍历算法是求解图的连通性问题、拓扑排序和求关键路径等算法的基础

  • 深度优先遍历(DFS depth-first search):类似于树的先根遍历,是树的先根遍历的推广(可以采用递归和借助栈的非递归方式实现)

  • 广度优先遍历(BFS breadth-first search):遍历类似于树的层次遍历,它是树的按层遍历的推广(借助队列非递归方式实现)

在这里插入图片描述
无向图的深度优先遍历:0->1->3->7->4->2->5->6
无向图的广度优先遍历:0->1->2->3->4->5->6->7
在这里插入图片描述

无向图的深度优先遍历:a b e f c d g h i
无向图的广度优先遍历:a b c d e f g h i

在这里插入图片描述
无向图的深度优先遍历:A B C F D H I E G
无向图的广度优先遍历:A B C D E F G H I

最短路径概念

  • 在许多应用领域,带权图都被用来描述某个网络,比如通信网络、交通网络等。这种情况下,各边的权重就对应于两点之间通信的成本或交通费用
  • 此时,一类典型的问题就是:在任意指定的两点之间如果存在通路,那么最小的消耗是多少。这类问题实际上就是带权图中两点之间最短路径的问题。

问题:计算V1到V8的最短路径
在这里插入图片描述

最短路径1:段数最少的最短路径:

  • 生活案例:换乘最少
  • 解决方案:使用广度优先搜索即可
  • 类似问题:编写国际象棋AI,计算最少走多少步就可获胜
  • 类似于树的层次遍历,需要借助队列来实现
  • 对于已经检查过的结点,应该标记为已检查,且不再检查它。否则可能会导致无限循环。可以使用另一个列表存放已经检查过的结点,找到即为可达,第一次找到,即为跳转最少。如果到最后队列为空,表明没有路径可以到达

最短路径2:权值最小的最短路径:

  • 生活案例:时间最少,距离最短
  • 解决方案:使用狄克斯特拉算法
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值