搜索算法刷题集锦
文章平均质量分 75
搜索算法是利用计算机的高性能来有目的的穷举一个问题解空间的部分或所有的可能情况,从而求出问题的解的一种方法。在大规模实验环境中,通常通过在搜索前,根据条件降低搜索规模;根据问题的约束条件进行剪枝;利用搜索过程中的中间解,避免重复计算这几种方法进行优化。
TOP-SECRET
这个作者很懒,什么都没留下…
展开
-
C++记忆化搜索算法与动态规划算法之公共子序列
公共子序列Description我们称序列Z = 1, z2, ..., zk >是序列X = 1, x2, ..., xm >的子序列当且仅当存在 严格上升 的序列< i1, i2, ..., ik >,使得对j = 1, 2, ... ,k, 有xij = zj。比如Z = 是X = 的子序列。现在给出两个序列X和Y,你的任务是找到X和Y的最大公共子序列,也就是说要找原创 2017-07-10 16:06:13 · 1836 阅读 · 0 评论 -
C++广度优先搜索算法之抓住那头牛(Catch that cow)
抓住那头牛:农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(01、从X移动到X-1或X+1,每次移动花费一分钟2、从X移动到2*X,每次移动花费一分钟假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?Catch that cow:Farmer John has been informed of the location of原创 2017-05-27 18:09:06 · 6507 阅读 · 0 评论 -
C++广度优先搜索算法之献给阿尔吉侬的花束
献给阿尔吉侬的花束Description 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫。今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的奶酪。现在研究员们想知道,如果阿尔吉侬足够聪明,它最少需要多少时间就能吃到奶酪。 迷宫用一个R×C的字符矩阵来表示。字符S表示阿尔吉侬所在的位置,字符E原创 2017-06-09 20:43:36 · 959 阅读 · 0 评论 -
C++广度优先搜索算法之仙岛求药
仙岛求药Description少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶。叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处。迷阵由M×N个方格组成,有的方格内有可以瞬秒李逍遥的怪物,而有的方格内则是安全。现在李逍遥想尽快找到仙药,显然他应避开有怪物的方格,并经过最少的方格,而且那里会有神秘人物等待着他。现在要求你来原创 2017-06-09 20:59:27 · 1910 阅读 · 1 评论 -
C++广度优先搜索算法之走出迷宫
走出迷宫Description当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。Input第一行是两个整数n和m(1接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点,'T'原创 2017-06-09 21:15:44 · 1879 阅读 · 0 评论 -
C++广度优先搜索算法之迷宫问题
迷宫问题Description定义一个二维数组: int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下原创 2017-06-12 13:41:58 · 3629 阅读 · 0 评论 -
C++广度优先搜索算法之走迷宫
走迷宫 题目描述 一个网格迷宫由n行m列的单元格组成,每个单元格要么是空地(用1表示),要么是障碍物(用0表示)。你的任务是找一条从起点到终点的最短移动序列。用U、D、L、R分别表示往上、下、左、右移动到相邻单元格。不能走到障碍物上,也不能走出迷宫。起点和终点保证是空地,保证从起点到终点一定存在至少一条路径。输入第1行:2个整数n和m,分别表示行数和列数(n,m <=100)原创 2017-06-13 22:42:28 · 5916 阅读 · 0 评论 -
C++广度优先搜索算法之Dungeon Master
Dungeon Master(地下城大师)Description(描述)You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit cubes which may or may not be filled with rock. It take原创 2017-06-15 13:15:26 · 2038 阅读 · 0 评论 -
C++广度优先搜索之Knight Moves
DescriptionBackgroundMr Somurolov, fabulous chess-gamer indeed, asserts that no one else but him can move knights from one position to another so fast. Can you beat him?The ProblemYour task is t原创 2017-06-16 13:51:06 · 1775 阅读 · 0 评论 -
C++广度优先搜索算法之哆啦A梦的时光机
哆啦A梦的时光机Description哆啦A梦有一个神奇的道具:时光机。坐着它,大雄和他的伙伴们能穿越时空,回到过去或者去到未来。有一天,大雄和他的伙伴们想穿越时空进行探险,可是时光机却出了一点故障,只能进行有限的时空穿越操作。大雄他们需要从现在出发,到达一个目标时间点进行探险,结束后再返回到现在,他们希望尽可能减少时光机的操作次数,你能帮助他们吗?原创 2017-06-17 15:49:46 · 2868 阅读 · 0 评论 -
C++广度优先搜索算法之鸣人与佐助
Description佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢?已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置。地图上的每个位置都可以走到,只不过有些位置上有大蛇丸的手下,需要先打败大蛇丸的手下才能到这些位置。鸣人有一定数量的查克拉,每一个单位的查克拉可以打败一个大蛇丸的手下。假设鸣人可以往上下左右四个方向移动,每移动一个距离需要花费1个单位时间,打败大蛇原创 2017-06-20 13:41:34 · 1017 阅读 · 0 评论 -
C++搜索与回溯算法之全排列问题
全排列问题:设有n个整数的集合{1,2,…,n},从中任意取出r个数进行排列(r),试列出所有的排列。可以用枚举,就像这样(当r=5时): #includeint n,i[5],r=5;bool mark(int x[],int y){ for(int j=0;j<y-1;j++) for(int k=j+1;k<y;k++) if(x[j]==x[k]) r原创 2017-05-21 22:08:36 · 6365 阅读 · 0 评论 -
C++搜索与回溯算法之素数环问题
素数环问题:从1到n(n代码如下:#include#includeint n;int num[10001]; //存储数据bool mark[10001]; //判断该数是否被标记过bool check(int x,int y) //判断是否满足"素数环"条件{ int k=2,i=x+y; while(k<=sqrt(i)&&i%k!=0) k++;原创 2017-05-22 22:11:41 · 6105 阅读 · 2 评论 -
C++搜索与回溯算法之迷宫问题
迷宫问题:一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走,用'#'表示;有的格子是空地,可以走,用'.'表示;。给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。输入R、C和迷宫,输出所有路径。代码如下:原创 2017-05-23 06:14:11 · 3166 阅读 · 1 评论 -
C++搜索与回溯算法之移动问题
桌子上有一个r行c列的方格矩阵,将每个方格用坐标表示,行坐标从下到上依次递增,列坐标从左至右依次递增,左下角方格的坐标为(1,1),则右上角方格的坐标为(r,c)。小明是个调皮的孩子,一天他捉来一只蚂蚁,不小心把蚂蚁的右脚弄伤了,于是蚂蚁只能向上或向右移动。小明把这只蚂蚁放在左下角的方格中,蚂蚁从左下角的方格中移动到右上角的方格中,每步移动一个方格。蚂蚁始终在方格矩阵内移动,请计算出不同的原创 2017-05-26 13:16:18 · 1251 阅读 · 0 评论 -
C++搜索与回溯算法之八皇后问题
八皇后问题:在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。输出所有的解。代码如下:#includeusing namespace std;int b[10]={0},c[20]={0},d[20]={0},a[10][10]={0};int t=0;void print(){ t++; printf("No. %d\n",t); for (int i =原创 2017-05-27 18:40:45 · 1756 阅读 · 3 评论 -
C++搜索与回溯算法之拆数
版本一:题目描述输入自然数N,然后将其拆分成由若干数相加的形式,参与加法运算的数可以重复。输入第1行:1个整数n(n≤30)输出所以拆分方案,顺序见样例。样例输入4样例输出3+12+22+1+11+1+1+1代码如下:#include #include int num[40],to原创 2017-05-28 14:28:26 · 2634 阅读 · 0 评论 -
C++搜索与回溯算法之字符串全排列
给定一个字符串,生成其中字符的所有的排列。(长度:最长10000,且所有排列按字典序输出)代码如下:#include #includeint check[360]; //用于存储每个字母的数量(Ascll码存储法),以此来判断是否可以使用该字母char word[10000]; //用于存储字母,方便输出char str[10000]; //字符数组int len; //用原创 2017-05-28 19:42:23 · 2004 阅读 · 0 评论 -
C++搜索与回溯算法之马拦过河卒
马拦过河卒题目描述棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。 棋盘用坐标表示,A点(0, 0)、B点(n, m)(n, m为不超过20的整数),同样马的位置坐标是需要给出的。现在要求你计算出卒从A点能够到达B点的路径的条数,假设马原创 2017-05-29 13:42:48 · 7337 阅读 · 0 评论 -
C++之小学奥数(1)
题目描述:ABCD* E DCBA 按以上格式输出ABCDE的值(A!=B&&A!=C&&A!=D&&A!=E&&B!=C&&B!=D&&B!=E&&C!=D&&C!=E&&D!=E)。 解题思路:看到这道题之后,许多人想到的是枚举,就像这样:#includeusing namespace std;int main() {原创 2017-05-30 14:07:56 · 3463 阅读 · 0 评论 -
C++之小学奥数(2)
求出第k小排列题目描述给出两个正整数n,k(n//也就是说要求全排列出来后的第k个数输入只有一行:两个整数,n(n输出输出该排列样例输入4 3样例输出1324题目分析当n==4时,所有的全排列(数)如下:1234,1243,1324,1342,1423,1432;2134,2143,2314,2341,241原创 2017-06-03 15:37:59 · 2348 阅读 · 0 评论 -
C++搜索与回溯算法之红与黑
红与黑Description有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。Input包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,原创 2017-06-11 14:41:10 · 6395 阅读 · 0 评论 -
C++搜索与回溯算法之棋盘问题
棋盘问题Description在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。Input输入含有多组测试数据。每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋原创 2017-06-11 14:51:23 · 3095 阅读 · 0 评论 -
C++搜索与回溯算法之跳棋的挑战
跳棋的挑战题目描述检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列只有一个,每条对角线(包括两条主对角线的所有对角线)上至多有一个棋子。 上面的布局可以用序列2 4 6 1 3 5来描述,第i个数字表示在第i行的相应位置有一个棋子,如下:行123456列246135原创 2017-06-14 13:26:20 · 3308 阅读 · 0 评论 -
C++搜索与回溯算法之马走日(遍历问题)
马走日Description马在中国象棋以日字形规则移动。请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。Input第一行为整数T(T 每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标n,m,x,y。(0Output每组测试数据包含原创 2017-06-17 12:07:17 · 10271 阅读 · 2 评论 -
C++搜索与回溯算法之母亲的牛奶
母亲的牛奶题目描述农民约翰有三个容量分别是A,B,C升的桶,A、B、C分别是三个从1到20的整数。最初,A和B桶都是空的,而C桶是装满牛奶的。有时,约翰把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了。由于节约,牛奶不会有丢失。写一个程序去帮助约翰找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性。输入第1行:3个整数A,B和C。输出第原创 2017-06-20 13:50:22 · 1147 阅读 · 0 评论 -
C++搜索与回溯算法之置棋问题
置棋问题题目描述在M*N的主格中任意指定X个格子构成一个棋盘,而其它格子是残缺的,不能放棋子。在任一个构成的棋盘上放置K个棋子,要求任意两个棋子不得位于同一行或同一列上。求满足条件的所有方案数。注意:棋盘是稀疏的,即X<(M*N)/2编程任务:1. 对给定的一个棋盘,求出该棋盘可放置的最多的棋子数P;2. 该棋盘上恰好放置i个棋子时的方案总数(1≤i≤P),其中经旋转和原创 2017-06-21 13:45:51 · 849 阅读 · 0 评论 -
C++搜索与回溯算法之城堡问题
城堡问题Description 1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####---#####---#---#####---# 2 # # | # # # # # #---#####---#####---#####---# 3 # | | # # # # # #---#########---#...原创 2017-06-24 13:51:04 · 1585 阅读 · 1 评论 -
C++搜索与回溯算法之The Castle
The Castle(想看翻译的朋友,请单击☀;想看代码的朋友,请单击☆)Description 1 2 3 4 5 6 7 #############################1 # | # | # | | # #####---#####原创 2017-06-24 14:12:36 · 1715 阅读 · 0 评论 -
C++搜索与回溯算法之Lake Counting(数湖)
Lake Counting(数湖)Description(描述)Due to recent rains, water has pooled in various places in Farmer John's field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <=原创 2017-07-02 17:36:54 · 1695 阅读 · 1 评论 -
C++搜索与回溯算法之LETTERS(字母)
LETTERS(字母)DescriptionA single-player game is played on a rectangular board divided in R rows and C columns. There is a single uppercase letter (A-Z) written in every position in the boa原创 2017-07-03 16:45:03 · 3090 阅读 · 0 评论 -
C++搜索与回溯算法之单词接龙
----------------------*单词接龙*----------------------Description单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如beast和astonish,如果接成一条龙则变为b原创 2017-07-09 10:56:04 · 2954 阅读 · 0 评论 -
C++搜索与回溯算法之选数
选数题目描述已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n)。从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为: 3+7+12=22 3+7+19=29 7+12+19=38 3+12+19=34。 现在,要求你计算出和为素数共有多少种。 例如上例,只有一种的和原创 2017-07-10 14:56:50 · 1410 阅读 · 0 评论 -
C++搜索与回溯算法之符号三角形
符号三角形Description 符号三角形的第1行有n个由“+”和”-“组成的符号 ,以后每行符号比上行少1个,2个同号下面是”+“,2个异号下面是”-“ 。计算有多少个不同的符号三角形,使其所含”+“ 和”-“ 的个数相同。 n=7时的1个符号三角形如下:+ + - + - + ++ - - - - +- + + + -- + + -- + -- -+Input原创 2017-07-12 12:21:37 · 1560 阅读 · 0 评论 -
C++搜索算法和曼哈顿距离之最少连通代价
最少联通代价Description在一个N行M列的字符网格上,恰好有 2 个彼此分开的连通块。每个连通 块的一个格点与它的上、下、左、右的格子连通。如下图所示:现在要把这 2 个连通块连通,求最少需要把几个’.’转变成’X’。上图的例子中, 最少只需要把 3 个’.’转变成’X’。下图用’*’表示转化为’X’的格点。Input第1行:2个整数原创 2017-07-15 11:30:56 · 2426 阅读 · 0 评论