# Java 深度优先搜索(DFS)科普文章
深度优先搜索(DFS)是一种用于遍历或搜索树或图结构的算法。在 DFS 中,尽可能深地搜索树的分支,直到达到叶子节点,然后回溯。在许多实际应用中,DFS 可以处理复杂的关系和结构问题,例如解决迷宫、路径规划、图论以及游戏状态搜索等。
## 深度优先搜索的基本原理
DFS 的基本思路是通过类似于栈的结构来实现节点的访问。其基本步骤如下:
1. *
原创
2024-10-27 05:58:34
24阅读
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例 2
这一篇我来分享一下搜索,并且附带三道经典搜索题的题解,至于什么是搜索,就不让大家bdfs了,搜索一般有两种:1.深度优先搜索(Depth-First-Search),简称深搜或DFS,一般用来进行图的遍历或暴搜出奇迹,暴搜应用范围很广,可以更直接的解决部分DP、模拟等题目,深搜大多是递归2.宽度优先搜索(Breadth-First-Search),又叫广度优先搜索,简称宽搜、广搜或BFS,一般用来
转载
2023-09-16 09:41:22
208阅读
基本思想:从初始状态S开始,利用规则,生成所有可能的状态。构成树的下一层节点,检查是否出现目标状态G,若未出现,就对该
原创
2023-05-31 23:49:57
140阅读
/*I - 深搜 基础Time Limit:1000MS Memory Limit:10000KB bit IO Format:%Id & %IuSubmit StatusDescriptionGiven a specified total t and a list of...
转载
2015-03-24 14:52:00
112阅读
# 深度优先搜索(DFS)算法及其在Python中的实现
深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索树或图的算法。它从根节点开始,尽可能深入每一个分支直到到达叶子节点,然后再回溯到最近的分叉点,从而访问其他未被访问的节点。DFS的应用广泛,包括路径查找、图是否连通等。
## DFS算法的基本思想
DFS的基本思想是通过递归或栈来实现。主要步骤如下:
1
原创
2024-09-30 04:08:46
11阅读
一、poj3141题目大意是给定一个正整数n,求经过多少次乘法或除法运算可以从x得到xn,可以使用中间得到的结果。思路:起始只有x的一次方,所以通过乘除得到的值应该用数组存起来后续可以循环遍历。开始只设定递归一次,判断是否达到目的,没有则多给一次递归机会,即deep+1。因为幂函数运算乘就可以做加法,除可以做减法,所以对于之前存入数组的每个值遍历时都dfs两种情况。还有一个很重要的剪枝,i...
原创
2021-08-26 17:03:03
144阅读
深搜优化【updating…】1.深搜是什么?2.深搜优化?深搜是很消耗资源和时间的一种方法,这里给出深搜方法的两种不同写法,并比较其中的效率:DFS1void DFS1(int s){ if(child[s].size()==0) return;//如果没有相邻节点了,则直接返回 vis[s]=true;//标记为已经访问了 for(int i=0;i<child[...
原创
2021-07-12 18:06:17
133阅读
一、poj3141
题目大意是给定一个正整数n,求经过多少次乘法或除法运算可以从x得到xn,可以使用中间得到的结果。
思路:
原创
2022-02-11 16:39:10
78阅读
深搜优化【updating…】1.深搜是什么?2.深搜优化?深搜是很消耗资源和时间的一种方法,这里给出深搜方法的两种不同写法,并比较其中的效率:DFS1void DFS1(int s){ if(child[s].size()==0) return;//如果没有相邻节点了,则直接返回 vis[s]=true;//标记为已经访问了 for(int i=0;i<child[...
原创
2022-01-26 10:10:13
77阅读
先引用一些前人的想法今天也终于领略到什么是深搜什么是广搜的区别和特点了,其实一直不太懂什么时候用深搜,什么时候用广搜,虽然两种都有用过,但是都是结合解题报告或者其他途径来做的,总感觉深搜用起来比较顺手,感觉很多题都可以用深搜来解决,但是今天遇到的这个题用深搜怎么想方设法都不好用,结果应该正确,但是就是TimeLimit,只好用广搜来解了,也颇费周折的各方面查资料知道了广搜一般用在有这样的提示:最短
题目描述这题是可以被一步捕获的棋子数的升级版,“可以被一步捕获的棋子数”只是从一个点开始遍历,而本题把所有的点都作为起始点遍历int visit(vector<vector<int>>& grid, int init_x, int init_y){ //这里判断时要注意,一定先判断是否越界,再判断值是否为0,否则报错看不出来,我就找了好长时间。。。 ...
原创
2022-08-17 17:00:13
207阅读
图的深搜与广搜一、介绍:BFS:这是一种基于队列这种数据结构的搜索方式,它的特点是由每一个状态可以扩展出许多状态,然后再以此扩展,直到找到目标状态或者队列中头尾指针相遇,即队列中所有状态都已处理完毕。DFS:基于递归的搜索方式,它的特点是由一个状态拓展一个状态,然后不停拓展,直到找到目标或者无法继续拓展结束一个状态的递归。 优缺点:BFS:对于解决最短或最少问题特别有效,而且寻找深度小,
转载
2023-11-30 10:38:03
91阅读
标题:题目链接直接上代码。在这里插入代码片#include <bits/stdc++.h>using namespace std;char a[20],ans[6],vis[20],sk[6];//sk数组保存结果int l,zhi,flag=0;//flag为判断找没找到int cmp(char a,char b){ return a>b;//重要的一步,排序...
原创
2021-08-26 17:03:50
149阅读
题目链接:传送门题意: 给出一些无向图,问有多少个“纯粹”的单环,纯粹的环就是环中每个点只有两个邻接点。思路:环中每个点只有两个邻接点, 从这个点去突破问题,以每个点为起点去深搜,如果遍历这个点的邻接点,所有的邻接点(包括自身)如果都只有两个临界点,这就是一个纯粹的环,把所有遍历过的点标记,以后就不要再用这些点为起点去深搜,因为如果用这些点搜得的情况是重复的。参考代码:#inc...
原创
2023-12-30 08:14:33
68阅读
DescriptionYou have a maze with obstacles and non-zero digits in it:You can start from any square, walk in the m
原创
2021-07-19 20:20:16
37阅读
Hidden String Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 1679 Accepted Submission(s): 591
转载
2015-12-06 14:36:00
122阅读
2评论
# Java文件夹深搜
在Java编程中,我们经常需要对文件夹进行深度搜索,以查找特定类型的文件或者执行特定的操作。文件夹深搜是一种递归算法,可以帮助我们遍历整个文件夹结构并找到目标文件。
## 文件夹深搜算法
文件夹深搜算法的基本思路是从根目录开始,递归地遍历每个子目录,并在每个子目录中查找目标文件。当找到目标文件时,我们可以执行相应的操作,比如打印文件路径或者进行其他处理。
下面是一个
原创
2024-02-15 07:06:02
21阅读
典型问题: 迷宫问题,核心:也是搜索可以break了。而不是跟回溯一样遍历整个树的从根节点到叶子节点的path,然后找到一条最佳的path
原创
2023-06-29 09:56:26
73阅读