![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索
相关例题,直接爆搜!
矩阵不需要秩
你被击倒多少次都不重要,重要的是你有多少次爬了起来。
展开
-
BFS 例题
首先这里还是和我上一篇博客的题目一样,因为这里a和a必有一个是大于0的,所以这里要首先判断它的起点是不是最安全的,但是这里题目好像没有这个测试数据,也就是写不写都一样。然后这里的几个if语句要写正确(因为没写不能走她走过的路,就因为这我调试了一个多小时),所以代码不能马虎,这里的话,直接在while语句中就可以判断是否能找到。值得注意的是,这里的memset的格式初始化无穷大,因为一般测试数据都是小于1e9的,所以写0x3f就可以满足要求了,它如果要加上数的话,也不会溢出,较0x7f是有优势的。原创 2023-08-21 18:52:46 · 31 阅读 · 1 评论 -
BFS 例题
这题为BFS入门题,这题值得注意的是,如果你将return mp[m][n];那么它将不会通过,因为a和b两者其中一个一定要大于1,所以终点是1,1的话,他在输出错误答案。所以正确的做法应该是将return语句放到while循环外面。这相当于模板代码,最好这样写,不然很容易出错。原创 2023-08-21 09:06:59 · 38 阅读 · 1 评论 -
DFS 例题
n=7,k=4,这里已经搜到了第三位,1,3,_,_。这里的话第三位必定是大于或等于3的,所以后面最小的组合是1,3,3,3.此时就已经是大于7了,按照我们常规思路的代码这种情况sum=4<7,所以没有剪枝掉,所以我们要进行进一步的剪枝。这里是一般的思路,那么这个代码是没问题的,但是他的时间复杂度太大了,会t两个点,所以我们要进行剪枝,这里if(sum>n)return;sum+(k-x+1)*i>=n //4+(4-3+1)*3和 7进行比较,显然前者更大,所以这种情况直接剪枝。原创 2023-08-20 17:18:06 · 26 阅读 · 1 评论 -
DFS 例题
这里值得注意的是:这题是不需要恢复现场的。因为这里要记录走过的最大的瓷砖数,也就是瓷砖可以重复走,但是不能重复计数。如果恢复现场的话,那么在某一点又走到了之前的位置,并且进行了dfs,那么就要计数了。那么你之前走过了,你再走到这里时你又计数了一次。那如果没有写恢复现场的话,他就不会走原来走过的路的同时res++,因为他不符合新dfs的条件,所以不会进行dfs。这里回溯的同时如果遇到没走过的路,就res++。所以只要遇到没走过的路,res就++,所以就不会出现重复计数的情况。原创 2023-08-20 16:21:45 · 40 阅读 · 1 评论 -
DFS 例题
因为这里要放k个棋,按照常规思路的话,x只能从一开始搜,但是也有可能第一行没有放棋子,第二行才有棋子,所以这里的关键点在于第一行往下搜如果搜完了,那么就可以从第二行在继续放下搜,注意:这里的递归代码要写在for循环外面,并且棋子数是不能动的。原创 2023-08-20 16:02:02 · 28 阅读 · 1 评论