图
图是一种数据结构,其中结点可以具有零个或多个相邻元素.两个结点之间的链接称为边.
图的常用概念
1)顶点
2)边
3)路径: 比如从D->C的路径有 ①D->B->C ② D->A->B->C
4)无向图: 顶点之间的连接没有方向,比如A-B,既可以是A->B, 也可以是B->A.
5)有向图:顶点间的连接有方向, 比如A-B, 只能是A->B.
6)带权图: 边带权值
图的存储结构
邻接矩阵
邻接矩阵是表示图形中顶点之间相邻关系的矩阵.
邻接矩阵无向图的代码分析
存储结构
1 | public class Graph { |
构造器
1 | /** |
插入结点与添加边方法
1 | // 插入结点 |
返回一个点所有邻接点的下标
1 | /** |
BFS
用队列先进先出特性, 将结点添加进队列, 输出并删除第一个结点后, 然后将它所有没进过队列的邻接点都添加进队列中, 来保证广度优先搜索的过程.
1 | /** |
DFS
用栈后进先出特性, 将结点添加进队列, 输出并删除第一个结点后, 然后将它所有没进过栈的邻接点都添加进队列中, 来保证深度优先搜索的过程.
1 | /** |
图的其它常用的方法
1 | // 返回结点的个数 |
完整代码和测试
1 | import java.util.ArrayList; |
邻接表
1)邻接矩阵需要为每个顶点都分配n个边的空间, 其实有很多边都是不存在,会造成空间的一定损失.
2)邻接表的实只心存在的边, 不关心不存在的边接表由数组链表组
本文链接: https://cqh-i.github.io/2019/08/24/数据结构-算法学习笔记-图/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
