【算法】深度优先搜索DFS 入门:基本知识+经典例题

您所在的位置:网站首页 深度优先搜索的基本思想 【算法】深度优先搜索DFS 入门:基本知识+经典例题

【算法】深度优先搜索DFS 入门:基本知识+经典例题

2024-07-09 14:26| 来源: 网络整理| 查看: 265

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