回溯
码不停Tick
这个作者很懒,什么都没留下…
展开
-
回溯水题训练
BNUOJ 1440这题其实就是变相的简单的n皇后问题,(不同的地方在于n皇后问题是每一行每一列都只摆放一个皇后,而这里可以不摆放)不过遍历时有个小技巧就是每走到一个位置都从此时的行出发往下遍历所有的行和列,这样,如果某一行不拜访,则可以通过循环直接下一行,无需再次递归,再次递归会TLE。#include#include#includeusing namespace std;原创 2018-01-14 02:58:08 · 215 阅读 · 0 评论 -
数独hdu1426
思路:首先输入的时候记录每一个空缺的位置,然后dfs每个空缺的位置。注意输出格式#include#include#include#include#include#include#include#include#define inf 0x3f3f3f3fusing namespace std;int sudoku[15][15];char temp; bool v原创 2018-01-24 10:51:08 · 324 阅读 · 0 评论 -
回溯: n皇后
算法详细解释参照刘汝佳竞赛入门。#include#include#include#includeusing namespace std;int cnt;int lo[3][20],n,record[15];bool ok;int dfs(int cur,int n){ if(n==cur){ return ++cnt; } for(int原创 2018-01-10 12:58:42 · 160 阅读 · 0 评论 -
蓝桥杯 剪格子(dfs回溯水题)
思路:判断一下和是奇数还是偶数,奇数的话肯定不行,然后,从左上角开始dfs回溯。em。。。因为不太喜欢递归的写法所以一直想要用栈实现,最后发现水平有限,实现不了。目前看来栈dfs的写法只适用于不回退的算法中,像回溯的还是要递归实现,不过其实不难,对dfs有更深的理解后.以后要多训练回溯和动态规划,感觉这是基本算法中最弱的两部分。代码:#include#include#include原创 2018-01-09 23:13:06 · 377 阅读 · 0 评论 -
素数环(剪枝)nyoj488
这题的数据比较厉害,如果不进行剪枝的话肯定会TLE的,剪枝:如果素数环元素的个数为奇数时一定是围成不了的,因为如果是奇数个元素,说明奇数的数字比偶数的数字1个,所以一定不可以形成奇偶相隔的情况,也就是说会出现两个奇数相邻,而奇数+奇数=偶数,不为素数。代码:#include#include#include#includeusing namespace std;int n,cas原创 2018-01-19 09:58:22 · 320 阅读 · 0 评论 -
骑士周游 贪心优化
思路:在原本直接回溯版本的基础上,走下一步的时候考虑下一步的下一步可行解的数量,按可行解的数量从小到大的顺序选择下一步。优化出来的效率高很多,再次感受到算法的魅力。/*输入n*n的棋盘,输出从给定位置出发的马踏棋盘的路径*/#include#define inf 0x3f3f3f3f#define debug cout<<"debug___________"<<endlusing na原创 2018-05-10 13:56:07 · 864 阅读 · 0 评论