【算法】深度优先搜索DFS 入门:基本知识+经典例题 |
您所在的位置:网站首页 › 深度优先搜索的基本思想 › 【算法】深度优先搜索DFS 入门:基本知识+经典例题 |
DFS最重要的是理清搜索顺序! ps:这是我入门dfs时写的博客,后来dfs渐渐熟练了,也补充了一些题目上去(带原题和代码)。个人感觉整篇博文从上到下确实由易到难,代码也由开始的冗长变得渐渐精简。 自学DFS看的视频: 小甲鱼:讲原理 青岛大学-王卓:讲的较为全面的基本知识p122-124 自学之后的题目总结:【DFS】题目总结 推荐AcWing y总的讲解! 基本知识深度优先搜索(DFS, Depth First Search)是一个针对图和树的遍历算法。早在19世纪就被用于解决迷宫问题。 它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底,这种尽量往深处走的概念即是深度优先的概念。(参考“可参考资料2”) 对图的理解可见: 图的详解 大概步骤: 深度优先搜索用一个数组存放产生的所有状态。 (1) 把初始状态放入数组中,设为当前状态; (2) 扩展当前的状态,产生一个新的状态放入数组中,同时把新产生的状态设为当前状态; (3) 判断当前状态是否和前面的重复,如果重复则回到上一个状态,产生它的另一状态; (4) 判断当前状态是否为目标状态,如果是目标,则找到一个解答,结束算法。 (5) 如果数组为空,说明无解。 对于pascal语言来讲,它支持递归,在递归时可以自动实现回溯(利用局部变量)所以使用递归编写深度优先搜索程序相对简单,当然也有非递归实现的算法。(摘自百度百科) 经典例题 1、水池问题很基础的水池问题 题目描述 输入 第一行输入一个整数N,表示共有N组测试数据 每一组数据都是先输入该地图的行数m(0m; for(int i=1;iarr[i][j]; } } for(int i=1;i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |