DFS:

/* 邻接表存储的图 - DFS */void Visit( Vertex V )
{printf("正在访问顶点%d\n", V);
}/* Visited[]为全局变量,已经初始化为false */
void DFS( LGraph Graph, Vertex V, void (*Visit)(Vertex) )
{   /* 以V为出发点对邻接表存储的图Graph进行DFS搜索 */PtrToAdjVNode W;Visit( V ); /* 访问第V个顶点 */Visited[V] = true; /* 标记V已访问 */for( W=Graph->G[V].FirstEdge; W; W=W->Next ) /* 对V的每个邻接点W->AdjV */if ( !Visited[W->AdjV] )    /* 若W->AdjV未被访问 */DFS( Graph, W->AdjV, Visit );    /* 则递归访问之 */
}

BFS:

/* 邻接矩阵存储的图 - BFS *//* IsEdge(Graph, V, W)检查<V, W>是否图Graph中的一条边,即W是否V的邻接点。  */
/* 此函数根据图的不同类型要做不同的实现,关键取决于对不存在的边的表示方法。*/
/* 例如对有权图, 如果不存在的边被初始化为INFINITY, 则函数实现如下:         */
bool IsEdge( MGraph Graph, Vertex V, Vertex W )
{return Graph->G[V][W]<INFINITY ? true : false;
}/* Visited[]为全局变量,已经初始化为false */
void BFS ( MGraph Graph, Vertex S, void (*Visit)(Vertex) )
{   /* 以S为出发点对邻接矩阵存储的图Graph进行BFS搜索 */Queue Q;     Vertex V, W;Q = CreateQueue( MaxSize ); /* 创建空队列, MaxSize为外部定义的常数 *//* 访问顶点S:此处可根据具体访问需要改写 */Visit( S );Visited[S] = true; /* 标记S已访问 */AddQ(Q, S); /* S入队列 */while ( !IsEmpty(Q) ) {V = DeleteQ(Q);  /* 弹出V */for( W=0; W<Graph->Nv; W++ ) /* 对图中的每个顶点W *//* 若W是V的邻接点并且未访问过 */if ( !Visited[W] && IsEdge(Graph, V, W) ) {/* 访问顶点W */Visit( W );Visited[W] = true; /* 标记W已访问 */AddQ(Q, W); /* W入队列 */}} /* while结束*/
}

用N表示图中顶点数,用E表示边数
如果用邻接表存储图,时间复杂度为O(N+E)
如果用邻接矩阵存储图,时间复杂度为O(N^2)

深度优先搜索(Depth First Search)、广度优先搜索(Breadth First Search)相关推荐

  1. C++Breadth First Search 广度优先搜索(附完整源码)

    C++Breadth First Search 广度优先搜索的实现 C++Breadth First Search 广度优先搜索实现完整源码(定义,实现,main函数测试) C++Breadth Fi ...

  2. Breadth-first Search(广度优先搜索)专题1

    广度优先搜索的定义 广度优先搜索BFS类似于树的层次遍历算法.基本思想是:首先访问顶点v,然后由v出发,依次访问v的各个未被访问过的顶点w1,w2,w3-wn.然后再访问wi(wi是w1,w2,w3- ...

  3. 广度优先搜索_快速入门广度优先搜索

    通过学习图的搜索算法,我们来学习下两种常见的算法:BFS.DFS. 广度优先搜索(BFS) 广度优先搜索(Breadth-First-Search),它更像是一种地毯式.层层推进的搜索策略.先从距离起 ...

  4. Breadth-first Search(广度优先搜索)专题2

    743. Network Delay Time 输入:int[][] times times[i]= new int[]{v,u,w} 表示从节点v到节点u需要时间w.注意这里是有向图. int N ...

  5. 【python3数据结构】图Graph及DFS(深度优先搜索)BFS(广度优先搜索)

    Graph 和 Vertex 构建基于邻接列表: # -*- coding: utf-8 -*- # @Date : 2019/12/1 # @File : AdjListGraph.pyimport ...

  6. 八数码深度优先搜索_深度优先搜索和广度优先搜索

    深度优先搜索和广度优先搜索 关于搜索&遍历 对于搜索来说,我们绝大多数情况下处理的都是叫 "所谓的暴力搜索" ,或者是说比较简单朴素的搜索,也就是说你在搜索的时候没有任何所 ...

  7. 数据结构与算法(python):广度优先搜索(Breadth First Search,BFS)和深度优先算法(Depth First Search,DFS)

    参考自 MOOC数据结构与算法Python版 目录 一.广度优先搜索 1.1 BFS算法过程 1.2 广度优先搜索算法分析 二.深度优先搜索 2.1 骑士周游 2.1.1 问题定义 2.1.2 构建骑 ...

  8. 常用算法2 - 广度优先搜索 深度优先搜索 (python实现)

    1. 图 定义:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合. 简单点的说:图由节点和边组成.一 ...

  9. 广度优先搜索与深度优先搜索

    广度优先搜索(宽度优先搜索,BFS)和深度优先搜索(DFS)算法的应用非常广泛,本篇文章主要介绍BFS与DFS的原理.实现和应用. 深度优先搜索 图的深度优先搜索(Depth First Search ...

  10. 深度优先搜索(DFS)和广度优先搜索(BFS)

    深度优先搜索和广度优先搜索,都是图形搜索算法,它两相似,又却不同,在应用上也被用到不同的地方.这里拿一起讨论,方便比较. 先给大家说一下两者大概的区别: 如果搜索是以接近起始状态的程序依次扩展状态的, ...

最新文章

  1. Nature 首度揭示大脑传递信息的真正逻辑
  2. Ceryx —— 基于 OpenResty 的动态反向代理
  3. dispatchTouchEvent onInterceptTouchEvent onTouchEvent
  4. linux 进程 地址空间 内存分布 简介
  5. 人脸识别安全吗?调查称六成受访者认为技术有被滥用趋势
  6. 有关Java中json字符串与map的转换使用
  7. js 获取元素,同级元素下的子元素总结
  8. 为基于类的策略选择突发数据量和超额突发数据量
  9. 【史上最详细】动态规划:矩阵连乘问题(C++实现,含备忘录方法)
  10. “Hello,Github!——如何配置并上传一个已有项目到Git上
  11. ROS(kinetic)安装中的一些问题(已解决)
  12. Vivado 约束文件XDC使用经验总结
  13. 《spring-boot学习》-10-RabbitMQ
  14. odoo tree 排序
  15. 主成分分析 PCA算法原理
  16. pe擦除服务器硬盘,怎么彻底删除硬盘数据
  17. 进制的转换(计算方法)
  18. linux文件名补全,Linux中10个关于命令行自动补全的技巧
  19. 机器学习,分类算法(饭店评价的例子)
  20. 二叉树:给后序中序遍历,求前序

热门文章

  1. c++ switch语句
  2. Elasticsearch分词器介绍
  3. 一个10年C++程序员对技术和业务的感悟,献给还在迷茫中的你
  4. 判断文件或目录是否存在的几种方式
  5. D. 互联网架构模板
  6. [C语言]口令比较填空:阅读程序,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 下面程序比较用户键盘输入的口令userInput与内设的口令password是否相同。若相同,
  7. 快播转型,用户且用切珍惜
  8. 程序员如何渡过中年危机
  9. 青少年等级考试【Python通关干货】(二级)
  10. 什么?RecyclerView中获取点击位置的接口被废弃了?