1.思维导图
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KHTjLg3m-1622463939764)(C:\Users\86152\Desktop\UHWO(I`U}A]
2.笔记
图的表示:
1.邻接矩阵
2.邻接链表
邻接矩阵和链表对比:
1.邻接矩阵由于没有相连的边也占有空间,因此存在浪费空间的问题,而邻接链表则比较合理地利用空间
2.邻接链表比较耗时,牺牲很大的时间来查找,因此比较耗时,而邻接矩阵法相比邻接链表法来说,时间复杂度低。
图的遍历:
图的遍历就是要找出图中所有的点,一般有以下两种方法:
(一)深度优先遍历:(Depth First Search, DFS)
基本思路:深度优先遍历图的方法是,从图中某顶点 v 出发
1.访问顶点 v
2.从 v 的未被访问的邻接点中选取一个顶点 w,从 w 出发进行深度优先遍历
3.重复上述两步,直至图中所有和v有路径相通的顶点都被访问到
伪码实现:
//伪码实现,类似于树的先序遍历
public void DFS(Vertex v){
visited[v] = true;
for(v 的每个邻接点 W){
if(!visited[W]){
DFS(W);
}
}
}
(二)广度优先搜索:(Breadth First Search, BFS)
广度优先搜索,可以被形象地描述为 “浅尝辄止”,它也需要一个队列以保持遍历过的顶点顺序,以便按出队的顺序再去访问这些顶点的邻接顶点。
实现思路:
1.顶点 v 入队列
2.当队列非空时则继续执行,否则算法结束
3.出队列取得队头顶点 v;访问顶点 v 并标记顶点 v 已被访问
4.查找顶点 v 的第一个邻接顶点 col
5.若 v 的邻接顶点 col 未被访问过的,则 col 继续
6.查找顶点 v 的另一个新的邻接顶点 col,转到步骤 5 入队列,直到顶点 v 的所有未被访问过的邻接点处理完。转到步骤 2
个新的邻接顶点 col,转到步骤 5 入队列,直到顶点 v 的所有未被访问过的邻接点处理完。转到步骤 2