数据结构之—图
来源:互联网 发布:淘宝中差评多久消失 编辑:程序博客网 时间:2024/06/10 04:59
深度优先搜索DFS遍历类似于树的前序遍历。其基本思路是:
a) 假设初始状态是图中所有顶点都未曾访问过,则可从图G中任意一顶点v为初始出发点,首先访问出发点v,并将其标记为已访问过。
b) 然后依次从v出发搜索v的每个邻接点w,若w未曾访问过,则以w作为新的出发点出发,继续进行深度优先遍历,直到图中所有和v有路径相通的顶点都被访问到。
c) 若此时图中仍有顶点未被访问,则另选一个未曾访问的顶点作为起点,重复上述步骤,直到图中所有顶点都被访问到为止。
2) 广度优先搜索遍历
广度优先搜索遍历BFS类似于树的按层次遍历。其基本思路是:
a) 首先访问出发点Vi
b) 接着依次访问Vi的所有未被访问过的邻接点Vi1,Vi2,Vi3,…,Vit并均标记为已访问过。
c) 然后再按照Vi1,Vi2,… ,Vit的次序,访问每一个顶点的所有未曾访问过的顶点并均标记为已访问过,依此类推,直到图中所有和初始出发点Vi有路径相通的顶点都被访问过为止。
<1>从有向图中选取一个没有前驱的顶点,并输出之;
任意一个具有n个结点的无向简单图,其边数小于等于n*(n-1)/2;我们把边数恰好等于n*(n-1)/2的n个结点的无向图称为完全图。
有向图强连通分量的Tarjan算法 [有向图强连通分量]。
在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。
直接根据定义,用双向遍历取交集的方法求强连通分量,时间复杂度为O(N^2+M)。更好的方法是Kosaraju算法或Tarjan算法,两者的时间复杂度都是O(N+M)。本文介绍的是Tarjan算法。 [Tarjan算法]
Tarjan算法是基于对图深度优先搜索的算法,每个强连通分量为搜索树中的一棵子树。搜索时,把当前搜索树中未处理的节点加入一个堆栈,回溯时可以判断栈顶到栈中的节点是否为一个强连通分量。
- 数据结构之—图
- 数据结构之图——模板实现
- 数据结构之图—— C++实现
- 数据结构 — 图 之 广度优先遍历
- 数据结构之图 Data Structure — graph
- 数据结构—图之邻接表
- 数据结构之图
- 数据结构复习之【图】
- 数据结构之图
- 基础数据结构之图
- 数据结构之图-邻接矩阵
- 数据结构之图详解
- C++数据结构之图
- Python数据结构之图
- 数据结构之图
- 数据结构之图
- 数据结构算法之图
- 数据结构之图
- Vim基本操作
- 黑马程序员:HybridApp在PHP46期授课完毕已助学员年员年薪20万
- 【GDOI2004】【可怜的绵羊】
- NYOJ-+-字符串
- 对线程的认知
- 数据结构之—图
- Leetcode题解 347. Top K Frequent Elements
- Web开发之Django框架的学习
- XML文件的常见解析方法
- hd 2089 不要62
- 文章标题
- Maven 手动添加 JAR 包到本地仓库
- lintcode flatten-binary-tree-to-linked-list 将二叉树拆成链表 前序扁平化 中序扁平化
- 准备写一个http下载,支持断点下载,多线程下载