随笔分类 -  ACM_搜索/暴力

摘要:题目链接:http://poj.org/problem?id=1166思路分析:题目要求求出一个最短的操作序列来使所有的clock为0,所以使用bfs;被搜索结点的父子关系的组织:在bfs中,队列中存储着解答树中搜索过的结点,并且每个结点都可以使用它在队列中的位置作为其唯一的ID;另外,使用另一个数... 阅读全文
posted @ 2015-05-16 10:19 Leptus 阅读(268) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429思路分析:题目要求找出最短的逃亡路径,但是与一般的问题不同,该问题增加了门与钥匙约束条件;考虑一般的搜索问题的解答思路:搜索算法即在解空间中搜索满足要求的答案,可以看做一棵不断生长的状态树,状态之间... 阅读全文
posted @ 2015-05-15 17:39 Leptus 阅读(270) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1427思路分析:题目要求判断是否存在一种运算组合使得4个数的计算结果为24,因为搜索的层次为3层,不需要选择出最短的路径,采用dfs更有效;拓展状态时,从当前状态拥有的数中选取两个进行某种运算(因为两个数... 阅读全文
posted @ 2015-05-12 22:19 Leptus 阅读(555) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1043思路分析: 搜索算法: A*算法,Heuristic函数:曼哈顿距离 剪枝技巧: 如果8数码问题中的初始状态的逆序数为奇数(除了’x’),则不存在解;否则,存在解;代码如下:#include #in... 阅读全文
posted @ 2015-05-12 17:12 Leptus 阅读(294) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=1077思路分析:题目要求在找出最短的移动路径,使得从给定的状态到达最终状态。搜索算法选择:由于需要找出最短的移动路径,所以选择bfs搜索判重方法:将空格视为数字9,则可以将状态的集合视为1-9的排列组合的集合,根据康托展开,将每一个状态... 阅读全文
posted @ 2015-05-06 23:29 Leptus 阅读(262) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102思路分析:搜索方法分析:由于需要寻找最短的找到公主的路径,所以采用bfs搜索需要注意的地方:1)如果当前状态为'#'字符,需要传送到另外一层,但是从该层到另外一层的时间是不会计算;2)如果当前状态为... 阅读全文
posted @ 2015-05-04 18:59 Leptus 阅读(243) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1226思路分析:题目要求寻找一串长度不大于500的C进制的密码,且该密码需要为十进制数N的整数倍。搜索方式选择:由于密码的长度未知(题目限制最大为500),所以状态树的深度比较深,采用dfs搜索效率比较低... 阅读全文
posted @ 2015-05-03 21:51 Leptus 阅读(507) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1253思路分析:因为问题需要寻找到达终点的最短的距离(最短的步数),即在状态转换图上需要找出层次最浅的的状态(A-1, B-1, C-1),所以采用bfs更快能找出答案;另外,若采用dfs则比较困难,需要... 阅读全文
posted @ 2015-04-30 20:44 Leptus 阅读(226) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=1664思路分析:数据较小,考虑深度优先搜索搜索解空间。代码如下:#include using namespace std;int M, N, Count = 0;void dfs( int deep, int x, int put ){... 阅读全文
posted @ 2014-10-24 21:44 Leptus 阅读(148) 评论(0) 推荐(0)
摘要:题目链接:Uva 167思路分析:八皇后问题,采用回溯法解决问题。代码如下:#include #include using namespace std;const int MAX_N = 10;int A[MAX_N];int M[MAX_N][MAX_N];int num, Max = 0;int... 阅读全文
posted @ 2014-10-16 03:50 Leptus 阅读(331) 评论(0) 推荐(0)
摘要:题目链接:Uva 552思路分析:时间限制为3s,数据较小,使用深度搜索查找所有的解。代码如下:#include #include using namespace std;const int MAX_N = 20;int n;int A[MAX_N], vis[MAX_N];int is_prime... 阅读全文
posted @ 2014-10-16 01:50 Leptus 阅读(189) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=1979思路分析:使用DFS解决,与迷宫问题相似;迷宫由于搜索方向只往左或右一个方向,往上或下一个方向,不会出现重复搜索;在该问题中往四个方向搜索,会重复搜索,所以使用vis表来标记访问过的点,避免重复搜索。代码如下:#include u... 阅读全文
posted @ 2014-10-12 19:53 Leptus 阅读(195) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=3984思路:经典型的DFS题目。搜索时注意剪枝:越界处理,不能访问处理。代码:#include using namespace std;const int MAX_N = 15;int map[MAX_N][MAX_N];typedef... 阅读全文
posted @ 2014-10-12 18:18 Leptus 阅读(242) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=2363思路分析:由于数据较小,采用暴力搜索法。假设对于矩形边长 1 using namespace std;int main(){ int n, min_area; double a, b, c, volume; ci... 阅读全文
posted @ 2014-10-12 13:21 Leptus 阅读(261) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=2245思路分析:无重复元素组合组合问题,使用暴力枚举法,注意剪枝条件。代码如下:#include using namespace std;const int MAX_N = 15;int n, k = 6;int Set[MAX_N],... 阅读全文
posted @ 2014-10-12 12:38 Leptus 阅读(177) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=1731思路分析:含有重复元素的全排列问题;元素个数为200个,采用暴力枚举法。代码如下:#include #include using namespace std;const int MAX_N = 200 + 10;void Prin... 阅读全文
posted @ 2014-10-12 01:27 Leptus 阅读(218) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=1256思路分析:该题为含有重复元素的全排列问题;由于题目中字符长度较小,采用暴力法解决。代码如下:#include #include using namespace std;const int MAX_N = 20;char P[MAX... 阅读全文
posted @ 2014-10-12 01:01 Leptus 阅读(220) 评论(0) 推荐(0)