数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历
2023-12-14 12:44:40
文章目录
图的基本操作
总览
找边
邻接矩阵直接找图中的某个元素是否为1即可
邻接表要遍历顶点的边链表
列出与某顶点相连的边
邻接矩阵找行或列
邻接表找顶点对应的边链表
对于有向图的邻接表的入边时候需要将其他顶点的边链表都遍历
插入顶点
此时插入的是与其他顶点都没有连接的顶点
删除顶点
邻接矩阵设置 顶点中的一个变量为布尔型变量用来标记该顶点是否有效,当删除该节点时,只需将该节点所在行和列设置为0即可
邻接表即遍历所有边链表,将有顶点的边都删除,并修改对于的边链表
增加边
顶点的第一个邻接点
就是遍历到的第一个
顶点的下一个邻接点
就是遍历到的第二个
设置或者获取某条边的权值
总览
图的广度优先遍历
总览
树的广度优先遍历
即找根节点的孩子节点先
图的广度优先遍历
即先访问节点的相邻节点
树vs图
图遍历可能访问到原先的节点,但树不会,因为它是一直访问孩子节点的
图广度优先遍历的代码实现
访问后入队,然后出队后再将其相邻且没有访问的节点访问,然后再入队,然后再出队再将其相邻且没有访问的节点访问,如此反复
广度优先遍历序列
遍历序列的可变性
不同邻接表对应的遍历序列可能不一样
算法存在问题
非连通图无法遍历完所有节点
解决方法就是每个节点都广度优先遍历
下面是改进
改进后的 复杂度分析
从结点树和边数考虑(从访问顶点和找各条边考虑)
广度优先生成树
广度优先遍历过程生成的
广度优先生成森林
即对各个连通分量广度优先遍历即可
练习:有向图的BFS
有些点BFS不能遍历完所有的结点
小结
图的深度优先遍历
总览
树的深度优先遍历
图的深度优先遍历
算法存在的问题
依然是所有顶点都深度优先遍历一次
复杂度分析
即可能同时调用V次代码(或者说来自递归工作栈)
即每个结点最终都会进入一次深度优先遍历函数,这样才可能最终深度优先遍历所有节点
只不过邻接矩阵中对应节点进入函数后时间复杂度为V
而邻接表为E
深度优先遍历序列
邻接表不一样,深度优先遍历序列可能不一样
深度优先生成树
同样,即将遍历序列的其他边去了即可
深度优先生成森林
图的遍历与图的连通性
小结
文章来源:https://blog.csdn.net/llovewuzhengzi/article/details/134936769
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!