![](https://img-blog.csdnimg.cn/20200814125915829.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
四大进阶算法---递归搜索回溯剪枝
系统的提升到算法的中阶水平
九霄云客
一个脚踏实地的梦想家
展开
-
中阶算法---dfs+回溯(4)
这次我们来看看n皇后问题,这又是典型的dfs例题。请输出字典序最小的x皇后问题对应的排列。(x<=10)输入一个数x输出包括一行,输出1~x的一个排列,满足x皇后问题的要求。样例输入8样例输出1 5 8 6 3 7 2 4八皇后问题的分解一共有两步:生成问题的所有候选解空间过滤掉那些不满足要求的细化这两步,需要认识到下面两点:八皇后所有候选解空间是: [1,2,3,4,5,6,7,8] 这个集合中元素的全排列(这个全排列不仅列出了候选解,并且还自动规避掉了皇后在横、原创 2020-08-23 11:33:37 · 158 阅读 · 0 评论 -
中阶算法---dfs+回溯(3)
这题把dfs安排的明明白白,非常好的体现了dfs在递归背景下的展现形式,这里就说这两句有点草率。。。但事实就是这样,不妨大胆一点,不要把递归啊,dfs当做多难的事。。。农民约翰有三个容量分别是 A,B,C 升的桶,A,B,C 分别是三个从1到20的整数。 最初,A 和 B 桶都是空的,而 C 桶是装满牛奶的。有时,农民把牛奶从一个桶倒到另一个桶中,直到被灌的桶装满或原桶空了。灌注的过程中牛奶不会洒出来。找出当 A 桶是空的时候,C 桶中牛奶所剩量的所有可能性。输入 输入一行三个数 A、B 和 C。 输原创 2020-08-23 00:23:44 · 148 阅读 · 0 评论 -
中阶算法---dfs+回溯(2)
从这里我们开始真正谈到dfs,谈及dfs我们不得不说起最经典的二叉树遍历。。。这里我们就谈二叉树的中序遍历。。。从1-n中选出m个数,要求同样的数字不能重复选择,按照字典序正序输出所有方案。例如:从1到4中选出2个数,共有6种方法,按照字典序输出,依次为:1 21 31 42 32 43 4输入输入共2个数m, n,中间用空格分隔。(1 <= m <= n <= 20)输出按照字典序正序输出所有方案。数据范围12% 2 <= n <= 5 1 &l原创 2020-08-21 23:14:08 · 468 阅读 · 0 评论 -
中阶算法---dfs+回溯(1)
其实我们在递归算法的学习过程中已经认识到了很多递归的思想,而递归的思想和dfs是非常相似的,不同的是在dfs中一般需要一个标记过程也就是回溯,这里我们练习一个类似dfs的递归题。。。从1-n中选出m个数,要求同样的数字不能重复选择,按照字典序正序输出所有方案。例如:从1到4中选出2个数,共有6种方法,按照字典序输出,依次为:1 21 31 42 32 43 4输入输入共2个数m, n,中间用空格分隔。(1 <= m <= n <= 20)输出按照字典序正序输出所有原创 2020-08-18 23:18:35 · 820 阅读 · 0 评论 -
中阶算法---递归(4)
全排列输入一个整数n(n <= 9),输出1、2、3、······、n这n个数的全排列(按照字典序输出)。输入一个整数n输出多行,每行表示一种排列,行内使用空格分隔相邻两数。输入样例3输出样例1 2 31 3 22 1 32 3 13 1 23 2 1//include<bits/stdc++.h>#include <iostream>#include<cstdio>#include<algorithm> usi原创 2020-08-18 15:03:56 · 632 阅读 · 0 评论 -
中阶算法---递归(3)
上台阶现在小瓜想通过台阶走上平台,最底层(小瓜所在的层)编号为1,最顶层编号为n。由于小瓜的腿比较短,他一次只能向上走1级或者2级台阶。小瓜想知道他有多少种方法走上平台,你能帮帮他吗?输入一个整数n,其中2≤n≤25。输出一行一个整数,表示小瓜上台阶的方案数数据范围对于12%的数据,2≤n≤5;对于28%的数据,2≤n≤10;对于100%的数据,2≤n≤25;输入样例4输出样例3样例解释从台阶1到台阶4,可能方案有:1→2→3→4,1→2→4,1→3→4,共3种。这题我原创 2020-08-17 17:13:51 · 1401 阅读 · 4 评论 -
中阶算法---递归(2)
第N台阶://include<bits/stdc++.h>#include <iostream>#include<cstdio>using namespace std;int total;int sum(int num,int step,int x){ if(num>x){ return 0; } if(num==x&&step%2==0){ total++; return 0; } sum(num+1,step.原创 2020-08-15 17:36:30 · 116 阅读 · 0 评论 -
中阶算法---递归(1)
谈到递归,不得不说起汉诺塔,其实现代码如下://include<bits/stdc++.h>#include <iostream>#include<cstdio>using namespace std;void fun(int n,char a,char b,char c){ if(n==1){ printf("Move %d from %c to %c\n",n,a,c); }else{ fun(n-1,a,c,b); pri原创 2020-08-15 16:59:04 · 170 阅读 · 0 评论