搜索
搜索
kelianlee
这个作者很懒,什么都没留下…
展开
-
Honeycomb Gym - 102028F
bfs搜索蜂巢 #include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; #define INF 0x3f3f3f3f int vis[10005][10005]; char str[10005][10005]...原创 2019-03-15 21:59:18 · 382 阅读 · 0 评论 -
Block Breaker HDU - 6699
题意 给你一个nxm的网格,刚开始每个坐标(i,j)都有一个盒子,现在你做执行q次操作,每次将(x,y)坐标上的盒子消失,这样会影响到求他盒子,当一个盒子的上下中的一个盒子消失了并且左右的一个一个盒子消失了这个盒子也会消失,大网格看作一个最大的盒子,当在边缘的盒子如果一个盒子的左边是边缘,那么我将左边的墙壁当作一个不可以消失的盒子。 思路 简单bfs,对于一个消失的盒子标记,我们在入队之前应...原创 2019-08-21 20:19:08 · 455 阅读 · 0 评论 -
Power Calculus UVA - 1374(IDA*)
题意、 给出 n,问说至少计算几步得到 x^n。 思路 IDA*,考虑最大值还不能到达n就剪枝 #include <iostream> using namespace std; int n; int num[111]; bool dfs(int cur,int now,int maxd) { if(now<=0||(now<<(maxd-cur...原创 2019-08-12 00:55:14 · 155 阅读 · 0 评论 -
The Rotation Game UVA - 1343(IDA*)
https://www.cnblogs.com/Bowen-/p/4955782.html 题意 有个#字型的棋盘,2行2列,一共24个格。 如图:每个格子是1或2或3,一共8个1,8个2,8个3. 有A~H一共8种合法操作,比如A代表把A这一列向上移动一个,最上面的格会补到最下面。 求:使中心8个格子数字一致的最少步骤,要输出具体的操作步骤及最终中心区域的数字。如果有多个解,输出字...原创 2019-08-11 20:24:46 · 153 阅读 · 0 评论 -
Editing a Book UVA - 11212(IDA*)
题意 给你一个序列,每次可以复制和黏贴一段子序列,问你至少经过多少次操作可以将序列变成有序的 思路 考虑IDA*,我们考虑一个序列最多是操作8步可以将序列变成有序,所以这个是我们的迭代上界,定义后继不正确的数字个数为h, 每一次操作最多是改变3个数字的后缀,所以当h>3*(maxd-d)时剪枝,maxd为当前的最大操作数,d为当前的操作数,这表示我们执行完所有的操作,并且每次操作都是...原创 2019-08-11 17:12:09 · 210 阅读 · 0 评论 -
八数码问题(BFS+hash判重)
思路 其实就是一个爆搜,用bfs遍历每一种情况跟目标情况作比较就可以,但是这有一个问题,就是在bfs过程中我们不能走已经走过的状态,现在走过的是一种状态,所以我们怎么判断是否走过了呢,用到hash,我们把3x3的数组放到1x9的数组中,将其求和然后取模,就能得到一个值只要判断这个hash值是否出现过就可以了 代码转载:https://blog.csdn.net/ccnuacmhdu/artic...原创 2019-08-02 14:12:42 · 682 阅读 · 0 评论 -
Eight POJ - 1077(经典双向BFS八数码)
题意 就是问你怎么走可以最后走成:1 2 3 4 5 6 8 x 的状态 思路 由于起点和终点已经知道所以可以用双向bfs,我们考虑bfs的树状图形 我们可以看到阴影部分的地方就是无用的地方,我们双向搜索的话,肯定能找到相同的一层!(注意这里是一层),所以我们双向bfs的策略就是:你走一层,我走一层,这样相会的时候就是路径最短的时候,因为层数相当于步数!至于路劲的问题就很简单了,用pr...原创 2019-08-05 15:20:40 · 306 阅读 · 0 评论 -
Knight Moves POJ - 1915(双向bfs)
题意 输入n表示棋盘大小,输入起点和终点,问你马要怎么多少步才能走到终点 思路 双向广搜,我们考虑一个单向dfs,从起点搜到终点整个过程和从起点和终点一起搜这不是肯定是双向的快嘛!具体的搜索的过程是这样的:我们定义一个vis[i][j],vis[i][j]=1表示从出发点开始搜起的访问过的点,=2表示从终点开始的访问过的点,我们考虑这样的过程,当访问的点是x,接下来要访问y点,如果y点已经访...原创 2019-08-02 22:13:00 · 204 阅读 · 0 评论 -
Fill UVA - 10603(BFS)
题意 给你a,b,c代表三个杯子的容量,刚开始的时候只有c的杯子是满水的,现在给你一个d,问你将水倒来倒去能不能使得一个杯子的水的容量是d,并且要求该过程中倒水的总量最小,如果不存在,输出一个最靠近d的数字 思路 我们考虑两个杯子a,b倒水的过程,只存在两者情况,1要么将b杯子的水全部倒满,2将a杯子的水全部倒过去使得a杯子空了但是b没有满,我们在这样的倒水的过程中肯定是取两者的最小值,我们...原创 2019-08-02 16:47:28 · 115 阅读 · 0 评论 -
变种二分
题目 请实现如下函数,查找一个“两段有序”的整数数组a中是否存在某个整数x,返回对应的数组下标。算法复杂度O(log2(n)) 注:“两段有序”的数组定义如下,将一个有序的数组从某个位置分成两段(分界点未知),然后把后面一段放在前、前面一段放在后 拼成一个新的数组,即为“两段有序”,示例如下: 原有序数组 4 7 9 ...原创 2019-05-14 00:22:25 · 112 阅读 · 0 评论 -
Mod problem FZU - 2108(dfs+模运算)
思路 dfs构造出数字之后取模运算就可以 模运算规则: 模运算与基本四则运算有些相似,但是除法例外。其规则如下: (a + b) % p = (a % p + b % p) % p (a – b) % p = (a % p – b % p) % p (a * b) % p = (a % p * b % p) % p ab % p = ((a % p)b) % p 结合率: ((a+b) % p...原创 2019-04-22 15:48:59 · 128 阅读 · 0 评论 -
Hua Rong Dao FZU - 2107(dfs)
暴力dfs搜索,注意return的位置,如果枚举完四种放法不return的话那么就会空出一行 #include <iostream> #include <algorithm> #include <cstring> using namespace std; int ans; bool fg; int n; int vis[11][11]; bool ch...原创 2019-04-21 19:06:27 · 140 阅读 · 0 评论 -
Bandwidth UVA - 140(全排列剪纸)
枚举所有的排列如果当前的最大值大于最大值就continue #include <iostream> #include <cstdio> #include <vector> #include <set> #include <algorithm> #include <cstring> using namespace std;...原创 2019-04-02 00:29:20 · 128 阅读 · 0 评论 -
再谈八皇后
大一的时候就接触了这个问题,那时候也写了这个问题当时真的觉得难无法理解,现在大二下学期了,偶然在办公室的墙壁上看到了这个问题然后那时候闲着无聊就在脑海里想了一下,突然发现这是个很简单的回溯问题,然后就把自己的思路试着写了出来,结果居然对了!!!可能这就是算法的有趣的地方,一个问题你现在不是很好理解,等过段时间来看看真的简单!!! #include <iostream> #inclu...原创 2018-06-16 13:42:16 · 168 阅读 · 0 评论 -
L3-008 喊山(BFS)
简单BFS #include <iostream> #include <vector> #include <queue> #include <cstring> using namespace std; struct node{ int x,num; }; vector<int> vt1[11111]; int vis[11...原创 2019-03-27 00:39:00 · 175 阅读 · 0 评论 -
L3-015 球队“食物链”(全排列DFS剪枝)
复习了一下dfs写全排列 #include <iostream> using namespace std; int vis[10]; int ans[10]; void dfs(int num) { if(num>5) { for(int i=1;i<=5;i++) cout<<ans[i]<...原创 2019-03-29 20:27:17 · 268 阅读 · 0 评论 -
UVA1613 - K-Graph Oddity
题意 n个点m条边的联通图,k为最小度数,保证其为奇数,问你染色方法使得相邻的点颜色不一样 思路 直接dfs模拟染色, #include <iostream> #include <vector> #include <algorithm> #include <cstring> using namespace std; const int...原创 2019-09-25 18:57:35 · 185 阅读 · 0 评论