首页 > 其他分享 >c语言刷dfs和bfs合集(含回溯)

c语言刷dfs和bfs合集(含回溯)

时间:2023-07-08 11:44:36浏览次数:49  
标签:尝试 BFS 路径 DFS bfs dfs 回溯

目录

1. dfs和bfs区别,解决不同的问题

解题思路1

首先本题规定了遍历的起点和终点,因此不需要套两层循环直接从 [0,0] 开始遍历到 [row-1][col-1] 即可。

对于寻找最短路径或者任何需要扫描全图的情况,BFS 可以理解为二叉树的层序遍历,对于本题这样的固定起点问题,可以利用 marked 标记数组在遍历的同时进行剪枝。
最短路径中的点向右下角方向上的相邻节点一定不会被标记过,换句话说,如果在入队的时候发现当前节点向右下的 前方 节点已经被访问过了,那么当前节点必然会比之前路径多 1,也就肯定不在最短的路径上,此时就可以直接忽略,继续访问队列中剩下的节点。

链接2:https://leetcode.cn/problems/shortest-path-in-binary-matrix/solution/bfszui-duan-lu-jing-wen-ti-bfsdfsde-si-k-ngc5/

解题思路2
典型的BFS最短路径问题,用DFS也可以求解,但是容易超时。

在二维矩阵中搜索,什么时候用BFS,什么时候用DFS?
1.如果只是要找到某一个结果是否存在,那么DFS会更高效。因为DFS会首先把一种可能的情况尝试到底,才会回溯去尝试下一种情况,只要找到一种情况,就可以返回了。但是BFS必须所有可能的情况同时尝试,在找到一种满足条件的结果的同时,也尝试了很多不必要的路径;
2.如果是要找所有可能结果中最短的,那么BFS会更高效。因为DFS是一种一种的尝试,在把所有可能情况尝试完之前,无法确定哪个是最短,所以DFS必须把所有情况都找一遍,才能确定最终答案(DFS的优化就是剪枝,不剪枝很容易超时)。而BFS从一开始就是尝试所有情况,所以只要找到第一个达到的那个点,那就是最短的路径,可以直接返回了,其他情况都可以省略了,所以这种情况下,BFS更高效。

BFS解法中的visited为什么可以全局使用?
BFS是在尝试所有的可能路径,哪个最快到达终点,哪个就是最短。那么每一条路径走过的路不同,visited(也就是这条路径上走过的点)也应该不同,那么为什么visited可以全局使用呢?
因为我们要找的是最短路径,那么如果在此之前某个点已经在visited中,也就是说有其他路径在小于或等于当前步数的情况下,到达过这个点,证明到达这个点的最短路径已经被找到。那么显然这个点没必要再尝试了,因为即便去尝试了,最终的结果也不会是最短路径了,所以直接放弃这个点即可。

2. bfs

  1. K 站中转内最便宜的航班
  2. 颜色交替的最短路径 有向图
  3. 对称二叉树 bfs/dfs
  4. 二叉树的层序遍历 bfs入门题
  5. 二进制矩阵中的最短路径 bfs
  6. 打开转盘锁 bfs
  7. 省份数量 dfs/bfs/并查集
  8. 颜色交替的最短路径
    TODO: 有向图
  9. 对称二叉树
    bfs,迭代方法:

3. dfs

  1. 电话号码的字母组合 dfs+回溯
  2. 括号生成 dfs+回溯
  3. 二进制手表 回溯+hash去重

标签:尝试,BFS,路径,DFS,bfs,dfs,回溯
From: https://www.cnblogs.com/kongweisi/p/17524908.html

相关文章

  • 搭建CDH后,hdfs的权限问题设置
    搭建CDH后,hdfs的权限问题问题描述:搭建cdh集群后,在hdfs中创建文件报错:Permissiondenied:user=root,access=WRITE,inode=“/“:hdfs:supergroup:drwxr-xr-x即使使用root账户也是一样。无论是用sudohadoopdfs-mkdir建立文件还是put文件,都会显示,同样的错误!!经过百度发现......
  • 【回溯算法】应用 2
    目录应用应用1:Leetcode131.分割回文串题目分析代码实现应用应用1:Leetcode131.分割回文串题目131.分割回文串给你一个字符串s,请你将s分割成一些子串,使每个子串都是回文串。返回s所有可能的分割方案。回文串是正着读和反着读都一样的字符串。示例1:输入:s="......
  • HDFS集群搭建:完全分布式
    主要区别一就是各个角色在哪儿启动,完全分布式也就是各个角色分布在不通的节点上1、基础环境:部署配置NN:core-site.xmlDN:workers:node01SNN:hdfs-site.xmldfs.namenode.secondary.http.addressnode01:500902、角色启动时细节配置:dfs.namenode.name.dirdfs.datanode.data.......
  • HDFS集群搭建:伪分布式
    HDFS集群搭建:伪分布式参考网址:hadoop官网前期准备:JAVA环境+SSH,hadoop用java开发,java移动性好,C++移植性好。问题:ssh远程登录有个弊端:通过SSH远程登录启动其JVM进程,由于SSH远程执行的时候是不会加载profile文件里面的环境变量的实操论证:在node1的profile中创建一个环境变量BI......
  • “远程客户端操作hdfs创建文件夹”,验证环境是否配置成功,以及HDFS错误整改
    HDFS错误整改编写“远程客户端操作hdfs创建文件夹”代码,验证环境是否配置成功!1、错误点1:改正方法:第一步:点击 文件>项目文件>模块第二步:会发现红色框里的显示的是15,这里我们需要改成8,如下图:2、错误点2:改正方法:第一步:点击 文件>项目文件>设置,后按照图中步骤点击:第二......
  • hdfs du命令是算的一份数据
    As you can see, hadoop fsck and hadoop fs -dus report the effective HDFS storage space used, i.e. they show the “normal” file size (as you would see on a local filesystem) and do not account for replication in HDFS. In......
  • SQL专家云回溯某时间段内的阻塞
    背景SQL专家云像“摄像头”一样,对环境、参数配置、服务器性能指标、活动会话、慢语句、磁盘空间、数据库文件、索引、作业、日志等几十个运行指标进行不同频率的实时采集,保存到SQL专家云自己的数据库中。因此可以随时对任何一个时间段进行回溯。 趋势分析进入趋势分析页面,......
  • 有向无环图-dfs-797所有可能的路径
    给你一个有n个节点的有向无环图(DAG),请你找出所有从节点0到节点n-1的路径并输出(不要求按特定顺序)graph[i]是一个从节点i可以访问的所有节点的列表(即从节点i到节点graph[i][j]存在一条有向边)。示例1:输入:graph=[[1,2],[3],[3],[]]输出:[[0,1,3],[0,2,3]]解释:有两......
  • 分布式文件存储 - FastDFS 工具类
    一、FastDFSClientpackagecom.changgou.file.util;importorg.csource.common.NameValuePair;importorg.csource.fastdfs.*;importorg.slf4j.LoggerFactory;importorg.springframework.core.io.ClassPathResource;importjava.io.ByteArrayInputStream;importjav......
  • 【牛客小白75】D 矩阵 【bfs+优先队列】
    题目https://ac.nowcoder.com/acm/contest/60063/D题意是说,给你一张\(n*m(n,m\leq10^3)\)大小的01地图,当前点下一步只能走到相邻的点上,如果这两个点值相同,则代价为2,否则代价为1,问从(1,1)走到(n,m)最少代价是多少思路首先很容易想到只往右下走是错的,有可能往左和往上走总代价更......