随笔分类 -  搜索

摘要:从n个不同元素中不重复地取出m(1≤m≤n)个元素在一个圆周上,叫做这n个不同元素的圆排列。如果一个m-圆排列旋转可以得到另一个m-圆排列,则认为这两个圆排列相同。 特殊情况可以这么理解,除个n就好了,为啥除个n呢,因为每个元素都可以当一次开头,除掉就把形成圆周之后重复的情况排除掉了 怎么枚举呢? 阅读全文
posted @ 2018-09-11 20:24 静听风吟。 阅读(1143) 评论(0) 推荐(0)
摘要:精确覆盖问题:在一个0-1矩阵中,选定部分行,使得每一列都有且只有一个1。求解一种选法 舞蹈链(Dance Link),也就是一个循环十字链表,可以快速的删掉和恢复某行某列 结合了舞蹈链的搜索就称作DLX算法 这里贴一个用DLX算法解决16×16数独的代码 9×9的直接暴力会更好 阅读全文
posted @ 2018-09-11 20:04 静听风吟。 阅读(1922) 评论(0) 推荐(0)
摘要:目的是寻找最优的方案使得自己能够利益最大化。 基本思想就是假设自己(A)足够聪明,总是能选择最有利于自己的方案,而对手(B)同样足够聪明,总会选择最不利A的方案 对抗搜索就是对于先手来说,取后手中状态最大的;对于后手来说,取终态中状态最小的 对于第一个人 它一定从当前局面可以到达的所有局面中,选择一 阅读全文
posted @ 2018-09-11 19:51 静听风吟。 阅读(588) 评论(0) 推荐(0)
摘要:倒水问题就是最典型的状态空间搜索了 所谓的状态空间搜索我可以理解为,设定好起始条件,结束条件 中间的过程是瞎搜 也就是状态是一个隐式图 有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水。 设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间 阅读全文
posted @ 2018-09-11 19:35 静听风吟。 阅读(298) 评论(0) 推荐(0)
摘要:之前有一篇博文有介绍枚举又重复元素的排列,这里先介绍一下怎么正常枚举有重复元素的组合 首先先来一个仅支持不同元素的枚举组合的程序 多年前的知识宝藏 然而错了好几次才写出来 然后我魔改了一个枚举有重复元素组合的程序,直接哈希判重了 脑子实在是转不动了 应该是对的,效率那是十分底下 阅读全文
posted @ 2018-09-11 19:30 静听风吟。 阅读(517) 评论(0) 推荐(0)
摘要:已知一棵二叉树的前序和后序遍历,不一定能重建唯一的二叉树呢? 原因在于,当一个根只有一颗子树时,通过前序遍历和后序遍历,无法确定该子树是这个根的左子树还是右子树 abdegcf,dgebfca 单子树的个数通过判定前序除了第一个根节点a外其他字母的前一个字母 和后序除了最后一个根结点a外其他字母的后 阅读全文
posted @ 2018-09-11 19:04 静听风吟。 阅读(874) 评论(0) 推荐(0)
摘要:使用普通的DFS可能会让你把时间浪费在深度非常大而且答案不是最优的搜索过程上 些问题搜索时可能会存在搜索很深却得不到最优解的情况 那么我们就给搜索设置一个约束,当搜索深度达到约束值却还没找到可行解时结束搜索 如果我们在一个深度约束下没有搜索到答案,那么答案一定在更深的位置,那么就把约束深度调整到更深 阅读全文
posted @ 2018-09-11 18:59 静听风吟。 阅读(907) 评论(0) 推荐(0)
摘要:判断第k短路的权值是否小于T 直接把队友的代码拿过来了,一定很经典 阅读全文
posted @ 2018-09-11 14:34 静听风吟。 阅读(304) 评论(0) 推荐(0)
摘要:启发式搜索只能深搜 一般也是用来解决最优解问题的 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位。 在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵坐标相差为1的格子)移动到空位上。 给定一个初始的棋盘,怎样才能经过移 阅读全文
posted @ 2018-09-11 14:31 静听风吟。 阅读(638) 评论(0) 推荐(0)
摘要:这种搜索仅限于解决起始状态和结束状态可以互换的问题之中,也就是从头搜到尾和从尾搜到头是等价的 移动一个只含字母A和B的字符串中的字母,给定初始状态为(a)表,目标状态为(b)表,给定移动规则为:只能互相对换相邻字母。请找出一条移动最少步数的办法 NKOJ1688移字母游戏 一通好找啊 阅读全文
posted @ 2018-09-11 14:27 静听风吟。 阅读(509) 评论(0) 推荐(0)
摘要:我记得有DLX精准覆盖算法,然后应用舞蹈链数据结构来解决这个问题来着 但是这里就直接贴一个裸的回溯的了 阅读全文
posted @ 2018-09-10 23:14 静听风吟。 阅读(234) 评论(0) 推荐(0)
摘要:先盗一张图: 正常的汉诺塔问题只要把A柱的所有盘子移动到C柱就好了,可以借助B柱。实现的逻辑如下: 我们在做这一类问题的时候如果从递归的终止条件去考虑的话,会容易很多。 我们就先看递归的终止条件 只剩一个盘子的时候,直接把A柱的盘子移动到C柱即可 否则,我们就要把A柱上的n-1个盘子从A柱借助于C柱 阅读全文
posted @ 2018-07-07 19:10 静听风吟。 阅读(339) 评论(0) 推荐(0)
摘要:如果题目真的要考察宽度优先搜索,那么这类题目往往具有比较大的编码难度,换个说法,就是细枝末节特别多,状态特别复杂。。 剥茧抽丝,这里以一个比较“裸”的BFS作为例子,了解一下实现BFS的一些规范。 直接把题目拿过来: 这道题如果看成了DP的话很容易写记忆化,但是,但是会爆栈。如果不信,你可以写一个递 阅读全文
posted @ 2018-07-07 18:53 静听风吟。 阅读(169) 评论(0) 推荐(0)
摘要:N皇后问题是DFS的代表性问题,其最难的地方就是在判重这里,想明白了怎么判重的话问题就很显然了。 这里给出两份代码,其中第一份代码的效率更好,就是在判重上下了功夫。当然,我记得还有使用位运算进行判重的方法,这里就先不介绍了。 首先是第一份代码,二维数组直接进行判重。 第二份代码的判重思路还是很容易看 阅读全文
posted @ 2018-07-07 18:43 静听风吟。 阅读(155) 评论(0) 推荐(0)
摘要:第一种情况给定的集合是满状态的,也就是枚举2的n次方种状态下的每一种子集的情况。 这里的x是一个二进制数,其长度为n,取值为00000...00000~11111...11111的每一种状态。 这里的i的取值为1,10,100,1000,10000...其目的就是一个一个去试x中对应位置的元素是1还 阅读全文
posted @ 2018-07-05 22:11 静听风吟。 阅读(472) 评论(0) 推荐(0)
摘要:我们假设A数组是方案数组,P数组是模板数组。 对于每一种方案,从第一个位置开始放元素,一个一个放。 我们原有的打印全排列的方法是不允许A数组中出现重复元素的,如下代码所示: 解决方案如下 我们在放每一个元素的时候,对于当前将要放的元素P[i],需要考虑已经在A数组中放置的元素里面(A[0]~A[cu 阅读全文
posted @ 2018-07-05 18:28 静听风吟。 阅读(1342) 评论(0) 推荐(0)