数据结构学习笔记------图

主要掌握深度优先搜索与广度优先搜索的程序设计
掌握图的基本概念及基本性质(度、路径长度、回路、路径等)、图的存储结构及其特性。
存储结构之间的转化、基于存储结构上的遍历操作和各种应用
(拓扑排序:AOV网
最小生成树:Prim算法、Kruskal算法
最短路径:Dijkstra算法、Floyd算法
关键路径: AOE网
)等。
重点掌握其基本思想和实现步骤,而算法的具体实现则不重要
结合图的实例考查算法的具体执行过程,
必须学会对给定的图手工模拟各个算法的执行过程。
还需掌握对于给定的模型建立相应的图去解决问题的方法

图的定义:
图G由顶点集V和边集E组成, 记为G=(V, E),
V(G) 表示图G中顶点的有限非空集,若V={V1,V2,…,Vn},用|V|表示图G中顶点的个数,也称为图G的阶
E(G) 表示图G中顶点之间的关系(边)集合,E={(u,v)|u∈V,v∈V},用|E|表示图G中边的条数

完全图(简单完全图)
无向完全图: 如果任意两个顶点之间都存在边;含有n个顶点的无向完全图有n(n-1)/2条边
有向完全图: 如果任意两个顶点之间都存在方向相反的两条弧; 含有n个顶点的有向完全图有n(n-1)条有向边

顶点的度、入度和出度:
图中每个顶点的度定义为以该顶点为一个端点的数目
对于有向图: 顶点v的度分为入度和出度,顶点v的度等于其入度和出度之和

边的权和网
在一个图中,每条边都可以标上具有某种含义的数值,该数值称为该边的权值、
这种边上带有权值的图称为带权图,也称做网。

图的存储结构:
数组表示法(邻接矩阵):有向图和无向图的顺序存储
邻接表(Adjacency List):有向图和无向图的链式存储
十字链表(Orthogonal List):是有向图的另一种链式存储结构
邻接多重表(Adjacency Multilist):是无向图的另一种链式存储结构。

图的基本操作:
(独立于图的存储结构, 不同的存储方式,操作算法的具体实现会有着不同的性能)
考虑不同的存储方式,具体算法的实现,以及采用何种存储方式的算法效率会更高
Adjacent(G, x, y); 判断图G是否存在边<x, y>或(x, y)
Neighbors(G, x); 列出图G中与结点x邻接的边
InsertVertex(G, x); 在图G中插入顶点x
DeleteVertex(G, x); 从图G中删除顶点x
AddEdge(G, x, y); 如果无向边(x, y) 或有向边<x, y>不存在,则向图G中添加该边
RemoveEdge(G, x, y); 如果无向边(x, y) 或有向边<x, y>存在,则从图G中删除该边
FirstNeighbot(G, x); 求图G中顶点x的第一个邻接点,若有则返回顶点号。
若x没有邻接点或图中不存在x,则返回-1
NextNeighbor(G, x, y); 假设图G中顶点y是顶点x的一个邻接点,返回除y之外顶点x的
下一个邻接点a的顶点号,若y是x的最后一个邻接点,则返回-1
Get_edge_value(G, x, y);获取图G中边(x, y)或<x, y>对应的权值
Set_edge_value(G, x, y, v);设置图G中边(x, y)或<x, y>对应的权值为v
图的遍历算算法 按照某种方式访问图中每一个顶点且仅访问一次。
(包括深度优先遍历和广度优先遍历)

DFS的具体实现:
基本概念: 连通分量, 强连通分量
G(V,E) : V—顶点的有穷非空集合,E—顶点之间的一条边
连通分量: 在无向图中,如果两个顶点间可以互相到达(可以是通过一定路径间接到达),
那么就称这两个顶点连通。 如果图G(V,E)的任意两个顶点都连通,则称图G为连通图;
否则,称G为非连通图,且称其中的极大连通子图为连通分量。

强连通分量: 在有向图中,如果两个顶点可以各自通过一条有向路径到达另一个顶点,
就称这两个顶点强连通。如果图G(V,E)的任意两个顶点都强连通,则称图G为强连通图;
否则,称图G为非强连通图,且称其中的极大强连通子图为强连通分量。

具体实现参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值