数据结构与算法-图

一、定义

是一种网状数据结构,是由有穷非空的顶点集合和描述顶点间关系的有边的集合组成。

由G(V,E)表示,G(Graph)就是这个图;V(Vertex)是该图的顶点,是图的数据元素;E(Edge)是图的边,是描述顶点之间的关系的。

如果所有的边edge都是双向的,就称无向图(undirected graph)。反之如果边是有向的,就是有向图(directed graph)

当图的每条边edge 都被分配了权重时, 就成了加权图(weighted graph):

二、存储结构

图的表示有两种主要方式:

1. 邻接表 (链表,链式存储结构)

有单链表组成的数组,数组的大小等于图中顶点的个数;

 图中的每一个顶点都有一个链表,存放着与其相邻的顶点;

 如果是有权图,可以在节点元素中设置权值属性 。

2. 邻接矩阵 (二维数组,顺序结构),使用二维数组(N × N)来表示图。如2个顶点之间有连接的边,就赋值两顶点交汇处为1(也可以是这条边的权重),反之赋值为 0 或者其他

下面是一个无向图的存储结构:

三、遍历

从图中某一个顶点出发访问图中其余顶点,且使每一个顶点仅被访问一次,这一过程称为图的遍历。

分为2种遍历方式,分别是 深度优先遍历 DFS(depth first searh)和广度优先遍历 BFS(breadth first search)

 

深度优先遍历:由初始顶点开始,一条道走下去,当走到走不动的时候,再回来走一条可以走的通的道,然后再继续往下走,直到走不动,以此反复。(可以采用递归和借助栈的非递归方式实现) 像下图这样纵向的一条条走完:

广度优先遍历:就是一层层的进行遍历,走完一个层级的顶点,再继续下一层的点 (可以借助队列非递归方式实现)。 像下图这样横向的一层层走:

下面是一个中国地图城市组成的图的深度和广度遍历:

四、最短路径

广度优先遍历、dijkstra算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值