![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索
文章平均质量分 78
流風回雪_YZK
只盼来日登蜀道..
展开
-
HDU 1242 dFS 找目标最短路
//多个起点,要最短得目标,不妨倒过来从目标出发,去找最近的点更新!!!!!!递归时思路要清楚#include#includeusing namespace std;int a[202][202]; int ax,ay;int f[4][2]={0,1,1,0,-1,0,0,-1};int mmin=50000;int visit[202][202]; void dfs(int x原创 2013-11-11 16:10:41 · 691 阅读 · 0 评论 -
hdu 5040 优先队列BFS+剪枝
(北京网络赛09题)题意:给一矩阵(图),里面有起点,终点,还有探照灯(每个有初始朝向,每秒顺时针转90度),前面有灯或者自己被灯照着,移动就要花3秒,求起点到终点最短时间。用一个数组三维数组记录一下,用来当前位置当前时间%4有没有灯,然后优先队列(时间短的在前面),搜索即可。考虑到可以来回走或者原地等,不能简单判重剪枝:每个地方最多是4种状态!就是4秒之后就全图状态回到一样!所以若当前状态(原创 2014-09-21 20:44:01 · 1136 阅读 · 2 评论 -
汉诺塔系列问题: 汉诺塔II、汉诺塔III、汉诺塔IV、汉诺塔V、汉诺塔VI、汉诺塔VII
/* 先说汉若塔I(经典汉若塔问题),有三塔,A塔从小到大从上至下放有N个盘子,现在要搬到目标C上,规则小的必需放在大的上面,每次搬一个,求最小步数。这个问题简单,DP:a[n]=a[n-1]+1+a[n-1],先把上面的n-1个放在B上,把最大的放在目标C上,再把N-1个放回到C上即可。现在是汉若塔II,改为四个塔,开始方程想简单了,不是最优的。网上的一种最优解法如下:(1)原创 2014-07-10 11:14:39 · 2574 阅读 · 0 评论 -
汉若塔系列续:汉诺塔VIII、汉诺塔IX、汉诺塔X。
汉诺塔VIII,在经典汉若塔问题上,问n个盘子的情况下,移动m次以后,是什么状态。我的思路:本质还是dfs,但是用m的值来指引方向,每搜一层确定第i个盘子在哪个塔,o(n)的算法,看图说明:原创 2014-07-10 19:54:14 · 1353 阅读 · 0 评论 -
hdu4848 求到达每个点总时间最短(sum[d[i]])。
开始的时候是暴力dfs+剪枝,怎么也不行。后来参考他人思想: 先求出每个点之间的最短路(这样预处理之后的搜索就可以判重返回了),截肢还是关键:1最优性剪枝(尽量最优:目前的状态+预计还有的最小时间>min就return !),2:可行性截肢:如果当前状态+预计状态已经不可行,return。(注意考虑是 continue,还是 return !).以及放的位置!在出口放的效果一般好一些(不在下原创 2014-07-27 11:46:44 · 947 阅读 · 0 评论 -
hdu 1496 hash
hash?判重,是否一样?相等?等式!没有想到,这次题做玩后,学到了HASH这一功能!当数据量在数组允许大小范围内时候即可!判断等式俩边是否相等,从而获得解的个数!从复杂度,n*m*k****,降到 2*....,本题从n^4,降到:2*n^2;#include#includeusing namespace std; int hash[2002000];int main(){原创 2014-01-21 10:21:19 · 641 阅读 · 0 评论 -
hdu 1429 bfs+二进制状态压缩
开始时候只用了BFS,显然超时啊,必然在结构体里加一个数组什么的判重啊,开始用的一个BOOL数组,显然还是不行,复杂度高,每次都要遍历数组来判重;后百度之,学习了二进制状态压缩,其实就用一个二进制数来表示当前状态,然后就可以用简单快速位运算来操作了。#include#include#include#include#includeusing namespace std;cha原创 2014-01-20 21:38:25 · 731 阅读 · 0 评论 -
poj1376 bfs,机器人
开始时候有点怕, 感觉什么也不会,不过静下来思考思考也就想出来了,一个简单的BFS即可,但是由于队列没有重判,一直爆队列(MLE!)下次一定要注意!(bfs第一次到达便最优?)#include#include#include#includeusing namespace std;int a[52][52];bool mark[52][52][5]; //三个状原创 2014-01-18 19:05:31 · 711 阅读 · 1 评论 -
poj1190,DFS/已知一个等式,求另一个最小值
7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体。 设从下往上数第i(1 Ri+1且Hi > Hi+1。 由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底面除外)的面积Q最小。 令Q = Sπ 请编程对给出的N和M,找出蛋糕的制作方案(适当的Ri和Hi的值),使S最小。 (除Q外,以上所有数据皆为正原创 2014-01-17 18:43:19 · 751 阅读 · 0 评论 -
poj2243+poj1915骑士问题
2243是骑士问题,八个格子的,BFS,因为要最短路经,所以没有用A*,A*跑不出来,太慢了,因为要搜索到所有解啊!一直更新最优,而BFS,一层一层搜索,第一次得到的便是最短的了!300格子,标记的话,BFS遍历所有时间复杂度也算可以!500MS过!稍微剪枝即可!时间注意!要标记每层已经走过的情况时候要在入队的时候标记!大大降低复杂度!因为出队的时候,有些已经在队里了,但是还没有被标记,现在又让他原创 2014-01-16 18:03:24 · 779 阅读 · 0 评论 -
poj3635 FULL tank(TLE) 有限制的最短路(BFS搜索)。
用的BFS+优先队列+二进制压缩状态判重+链式前向星, TLE,好像有人这样过了。。。好像要用A*算法,还不太会,所以暂时放弃。但是也学会了很多,学习了链式前向星,更深理解了BFS求最优的时候,什么时候是第一次搜到结果就是最优,该题,通过枚举加的油量,每次加一个单位,从够下一条路开始到满容量,枚举所有路,花的钱少的在队优先(头),故先出队找到目标结点的必然最优,因为后面的都是前面再加钱的。。。。好原创 2014-01-24 11:17:08 · 1130 阅读 · 1 评论 -
由八数码问题引入。对BFS有更深考虑
12号到今天共研究八数码问题poj1077,首先用的是普通BFS,遇到很多问题,开始用一个二级指针作为结构成员,知道了二级指针与二维数值名的不同!http://write.blog.csdn.net/postedit!讲得不错。发现自己代码能力渣死!进入正题,用BFS过不了,先学习了八数码问题有解条件,并扩展到N数码有解问题。做到奇数偶数剪枝,过不了,太慢,于是学习了HASH判重,学习了康托展开(原创 2014-01-16 16:44:07 · 830 阅读 · 0 评论 -
sgu179 SGU起航!
//发现dfs除了搜索功能外的其他功能,他本身是一种序列,这个题恰是“先序”的下一个(合法范围内)序列!#include#include#includeusing namespace std;struct state { string s; int sum_0; int sum_1;};vectorv;bool flag;void原创 2013-12-12 20:46:13 · 676 阅读 · 0 评论 -
hdu1072(bfs)
#include#include#includeusing namespace std;int a[10][10];int state_time[10][10];int f[4][2]={0,1,0,-1,1,0,-1,0};struct state{ int x,y; int time; int count;};int main(){ int原创 2013-11-28 19:11:30 · 729 阅读 · 0 评论 -
hdu 4771 求一点遍历所有给定点的最短路(bfs+dfs)
题目如题。题解如题。由于目标点最多只有4个,先bfs出俩俩最短路(包括起点),再dfs最短路。)0s1A;(当年弱跪杭州之题,现看如此简单)#include#include#include#include#includeusing namespace std;struct point{ int x,y; int cnt;};char a[105][105]原创 2014-08-27 21:48:07 · 3680 阅读 · 0 评论