
DFS
文章平均质量分 78
还有多远
这个作者很懒,什么都没留下…
展开
-
POJ-1321(类8皇后问题)
题目:http://poj.org/problem?id=1321分析:题目数据量很小暴搜即可#include int n, k, tot;char board[10][10];void dfs(int x, int r, int u){ if(!x){ ++tot; return; } if(r >= n) return; //try to plac原创 2016-01-12 00:56:59 · 368 阅读 · 0 评论 -
POJ-2248(加法链,DFS)
题目:http://poj.org/problem?id=2248大意:序列第一个数为1,之后的每个数都等于之前的任意两个数(可以相同)相加,问最后一个数是N的情况下,求一个最短的序列思路:搜索,确定上下界,下界一定不小于log2(N)+1,上届即目前最优序列的长度,搜索时,用每一层搜索最后一个数和之前的数相加#include #include #include us原创 2015-08-18 21:21:02 · 1477 阅读 · 0 评论 -
ZOJ-2576(dfs)
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1576分析:给出N,打印出2N的所有分割方式,使得后一个数大于等于前一个数,暴搜即可#include int n, m, st[22], top;void out(){ printf("{%d", st[0]); for(int i = 1; i原创 2015-03-18 00:44:32 · 476 阅读 · 0 评论 -
POJ-2078(dfs + 剪枝)
题目:http://poj.org/problem?id=2078暴搜加剪枝:rotate实际上是相对的,所以第一行可以不动,而且当发现一行的和不小于当前结果时,可以立马结束本次搜索#include #include using namespace std;#define INF 999999999int n, matrix[7][7];int offset[7], a原创 2015-03-17 23:35:39 · 905 阅读 · 0 评论 -
HDOJ-3416(无重边的最短路径个数)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3416分析:刚开始想着是不是先将所有的最短路找出来,再根据重边情况求最大独立集,感觉这太复杂了,而且复杂度也不允许,在求出最短路径之后,数一数能构成多少无重边的最短路径不就行了,编码时发现dfs数路径的时候有点最大流Dinc算法的感觉。#include #include #include原创 2015-03-03 23:46:41 · 510 阅读 · 0 评论 -
POJ-2197(DFS)
题目:http://poj.org/problem?id=2197分析:要输出全部符合的路径,肯定是暴搜+剪枝,先对每个节点的邻居按标号排个序,这样dfs的路径就自然是字典序的了。#include #include #include #include using namespace std;#define MAX_NODE 25#define MAX_DIST 1000原创 2015-03-15 23:29:56 · 515 阅读 · 0 评论 -
ZOJ-1832(DFS)
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=832题意:2N个字符串两两合并,构成N个相同的字符串,输出这个字符串分析:要能构成N个相同的字符串,假设其长度为L,则必须每个字符串s[i]都得有一个长度为L-s[i].size()的伙伴。一开始从P个最长的字符串中选一个,从Q个最短的字符串中选一个,进行合并,检测原创 2015-03-15 22:08:53 · 376 阅读 · 0 评论 -
POJ-1240(分治,递归降解)
题目:http://poj.org/problem?id=1240题目的意思即,给定一棵m元树的前序和后序遍历,问你一共有多少颗m元树有这样的性质。乍一看好像没什么头绪,由于题目中也提到了由中序和后序求前序,想到是不是同样能用分治法。我们知道前序遍历的开头是这棵树的树根,其余部分是子树,如果用f(m, tree)来表示根据m元tree的前序和后序遍历能构造出多少种树,设子树有n棵,则原创 2015-01-07 20:00:54 · 1391 阅读 · 0 评论 -
POJ-1480(最短程序,迭代DFS)
一开始想的是生成一种程序进行一次判断,后来想想其实可以边生成程序边进行原创 2014-10-31 21:35:19 · 635 阅读 · 0 评论 -
POJ-1655(DFS)
(1)挑选一个叶子作为根(2)DFS得到每棵子树的节点数(3)DF原创 2014-07-08 01:14:11 · 461 阅读 · 0 评论 -
HDOJ-2234(迭代DFS)
4*4的矩阵,数字范围是[1, 4],直接用数字表示的话,需要用3个bit表示,3*16=48,不尴不尬的,所以可以用4个bit表示一个数字,虽然冗余了,16进制表示上但是还是比3bit的好看些:#include typedef unsigned long long ULL;ULL rowMask[4][4] = {0}, wholeRowMask[4] = {0};ULL原创 2014-07-08 17:15:15 · 609 阅读 · 0 评论 -
POJ-2488(回溯+剪枝)
因为要求字典序最小,所以搜索时我们要保证下一个可以遍历到的点是原创 2014-06-16 15:15:20 · 479 阅读 · 0 评论 -
HDOJ-1557(枚举或搜索)
题目中每个团体加入或不加入联盟一共有原创 2014-06-14 00:10:43 · 502 阅读 · 0 评论 -
HDOJ-1010(DFS + 奇偶剪枝)
刚开始忘了判断是否在过程中路过终点(这也是要剪枝的,因为所有点只能访问一次)原创 2014-07-23 20:46:18 · 473 阅读 · 0 评论 -
POJ-2492(DFS)
深搜检测是否有冲突原创 2014-06-13 00:11:15 · 378 阅读 · 0 评论 -
删除部分字符使字符串对称
给定一个字符串和最多能进行删除操作的次数,怎样用最少的删除操作才能使该字符串对称(这也使结果字符串变的最长了),即成为palindrome?例如一个字符串s = "abcbdda",我们可以删除"dd"获得"abcbdda"使得s变为palindrome很容易想到DFS(回溯)的方法:(1)从左边i和右边j同时扫描字符串,直到两个指针相遇或出现两字符不同,即i >= j || s[i]原创 2014-06-03 20:31:06 · 1443 阅读 · 0 评论 -
POJ-1680(递归模拟)
题目:http://poj.org/problem?id=1680分析:父进程wait会等到子进程执行完成之后才继续下一步,每个进程都执行相同的代码,刚好和递归函数调用的方式一致。需要注意的是【ProcessID==0】每个子进程仅打印一次,对应到递归调用中,就是进入函数时打印一次。#include const int kRoot = 1000;int N, K, P;b原创 2017-02-12 14:31:53 · 844 阅读 · 0 评论