![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
搜索
搜索算法与应用
run around
这个作者很懒,什么都没留下…
展开
-
双向bfs
双向搜索适用于起点和终点状态都很明确的搜索题。对于正常的bfs,就像从一个圆从中心向外发散,开销的话就是面积。但是我们可以从起点和终点一起开始搜索,相遇到一个点的时候搜索就结束了,这样的复杂度就是两个小圆的面积。#include <iostream>#include <queue>#define P pair<int, int>using namespace std;//记录下当前状态, 从前往后搜索值为1,从后往前搜索值为2,如果某状态下,当前节点和准备扩展节原创 2022-02-24 17:16:19 · 333 阅读 · 0 评论 -
二维平面上的回溯算法(dfs)
回溯算法在二维平面上的搜索也能得到应用,也就是我们常说的dfs;题目给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:输入:3 4ABCESFCSADEE给定 word = “ABCCED”, 返回 true.给定 word...原创 2019-04-25 21:01:37 · 478 阅读 · 0 评论 -
回溯法的又一应用------N皇后问题
洛谷1219题目描述检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。上面的布局可以用序列2 4 6 1 3 5来描述,第i个数字表示在第i行的相应位置有一个棋子,如下:行号 1 2 3 4 5 6列号 2 4 6 1 3 5这只是跳棋放置的一个解。请编一个程序找出所有跳棋放置的解。并把...原创 2019-04-25 21:47:57 · 242 阅读 · 0 评论 -
排列问题
回溯法首先能处理一种排列问题,即全排列题目给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入:31 2 3输出:1 2 31 3 22 1 32 3 13 1 23 2 1有一个递归公式:perm(nums[0…n-1]) = {取出一个数字} + perm(nums[0…n-1]-这个数字);#include <iostream>#incl...原创 2019-04-24 20:54:05 · 179 阅读 · 0 评论 -
组合问题
回溯法能解决的另一个重要的问题就是组合问题题目给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:2 43 42 31 21 31 4#include <iostream>#include <vector> using namespace std;int n,k; //求解C...原创 2019-04-24 21:14:47 · 1006 阅读 · 0 评论