DFS&BFS
文章平均质量分 57
Falling~
这个作者很懒,什么都没留下…
展开
-
部分和问题
给定n个整数ai,求是否可选出若干个数,使它们的和恰好为k原创 2017-02-24 21:00:10 · 391 阅读 · 0 评论 -
迭代加深搜索IDA*---uva1343 the rotation game
给定一个井字的图形,A-H操作,最少经过几次操作可以将中间8个变成一样的数字//对于A—H的操作处理得很巧妙//而且还有reverse操作,可以将mp转换到原来的样子//启发函数h()#include #include using namespacestd;const int maxn =24;const int转载 2017-11-24 20:56:54 · 231 阅读 · 0 评论 -
判断相同的子树--uva12219 Common Subexpression Elimination
给定一棵树,第一次出现的结点直接输出,并编号。如果有重复的子树,就输出该子树的根的编号。//非常神奇的递归#include #include #include #include using namespacestd;const int maxn =5e4 + 5;char line[maxn <<3],*p;int转载 2017-10-04 11:36:26 · 190 阅读 · 0 评论 -
BFS--cf793b Igor and his way to work
从起点走到终点,最多只能转2次弯,求是否能到达终点。如果用dfs,会因为重复状态过多超时。所以需要bfs,并且记录是否访问过。由于有方向和转弯次数的限制,所以需要一起在vis中记录。#include #include #include using namespacestd;const int maxn =1000 + 5;ch转载 2017-08-25 09:29:42 · 303 阅读 · 0 评论 -
迭代加深搜索--埃及分数
需要用单位分数1/a表示任意分数,并且加数中不能有相同的,加数少的比加数多的好,个数相同时,最小的分数越大越好。首先,加数的个数不确定,bfs的话,从第一个比a/b小的数1/c开始,可能从所有比它小的数开始加,一层都遍历不完。dfs,如果直接从1/c开始,找到答案可能很慢,对于加数个数和大小的限制实现起来很慢。迭代加深搜索:从小到大枚举深度上限maxd,每次执行只考虑深度不超过转载 2017-08-04 09:10:10 · 484 阅读 · 0 评论 -
迭代加深搜索--IDA*--uva11212 Editing a book
给定1 典型的状态空间搜索。每个序列就是一种状态,通过剪切粘贴互相转移。1.9!*每次可能的移动数,可能超时。2.启发函数:统计序列的无效状态(即a[i] + 1 != a[i + 1])的个数h,每次移动最多改变3个无效状态,所以当3 * d + h > 3 * maxd时,可以剪枝。3.ps:血的教训,状态数组一定要用类或结构体表示。4.默认已经排好序的不拆开比拆开步数原创 2017-08-04 15:57:30 · 496 阅读 · 0 评论 -
BFS--状态图--uva10603 Fill
3个大小为a,b,c的杯子,一开始只有c装了水,求是否能互相倒水,倒出d,如果可以,求最小倒水量,如果不能,求最接近d的d'。以杯子水量(x,y,z)为状态,bfs即可。因为总水量不变,vis[][]即可检查是否遍历过。#include #include #include #include using namespaces原创 2017-08-01 18:41:03 · 202 阅读 · 0 评论 -
奇偶性剪枝--hdu1010 Tempter of the Bone
给定地图,n * m,S为起点,D为终点,X为墙壁,求是否能刚好在t秒时到达出口。#include #include #include #include #include using namespacestd;const int maxn =8;char mp[maxn][maxn];int n,m,t;原创 2017-08-14 20:19:05 · 239 阅读 · 0 评论 -
DFS--uva11853 Paintball
非常有想法的一道题。1000 * 1000的地图上,n个圆,求是否能从左边界走到右边界,若可以,求最北边的出入口坐标。#include #include #include #include using namespacestd;const int maxn =1000 + 5;struct circle{ dou原创 2017-07-24 21:21:02 · 226 阅读 · 0 评论 -
贴瓷砖
小明家的一面装饰墙原来是 3*10 的小方格。现在手头有一批刚好能盖住2个小方格的长方形瓷砖。瓷砖只有两种颜色:黄色和橙色。//240ms//ans = 114434#include #include #include using namespacestd;int mp[5][12];int ans =原创 2017-05-30 20:18:21 · 653 阅读 · 0 评论 -
素数环
//给定n,从1到n,某种排列围成环,使相邻数之和为质数原创 2017-02-24 21:33:16 · 310 阅读 · 0 评论 -
dfs路径输出
1.输出存在任意路径达到递归出口时,如果符合条件就输出并return truebool dfs(int x,int y,int cnt){ if(cnt == p *q){//这里输出,或者在main函数中输出 return true; } for (int i =0; i 8;原创 2018-01-31 16:00:20 · 2074 阅读 · 0 评论