dfs/bfs
帐下幕僚
我只是一个普普通通的大学学生,我来到这里是想获得我在学校所不能得到的知识。
展开
-
the die is cast 题解
双层dfs,小心点就过了,一星期没玩dfs,居然弄了我两个小时多。。。。。。这种智障#include <stdio.h>#include <string.h>int h,w;char str[51][52];int ccnt[7],cnt,flag;int mx[5]={0,1,-1,0,0},my[5]={0,0,0,1,-1};void dfs2(int posy,int posx)原创 2016-05-19 22:03:39 · 1013 阅读 · 0 评论 -
poj1321题解(也是我的第一篇博客)
和八皇后问题基本类似,回溯算法搞定。//在poj提交时最好不要用布 //尔类型,ce过#include <stdio.h>#include <string.h>#include <stdbool.h>char chess[9][10];//最后一个放换行符int n,k,count;bool is_put(int row,int cline){ int i; for(i=原创 2016-05-12 10:06:51 · 823 阅读 · 0 评论 -
uva12558(埃及分数--难)(IDDFS入门题)
迭代深搜(IDDFS),顾名思义就搜索深度一次增加一的深度优先搜索,这样就能达到与广度优先搜索类似的效果。但是广搜的空间复杂度太高,迭代深搜就能很好地弥补这点。 写法和深搜差不多,就是加了一个深度。当当前搜索深度大于限定时就退出。 另外,对于这道题每给一个深度(也就是选择几项分数),每次选一个分数时它的分母是有范围限制的, 首先它要大于上一个分数的分母, 然后它还要大于等于(la+lb-1)原创 2016-08-10 16:45:40 · 1133 阅读 · 2 评论 -
八数码问题多种解法比较(poj1077宽搜,双向宽搜,A*,IDA*+扩展)(持续更新)
有个小的优化,逆序数(除去x)的奇偶性相同,那就一定可以达到,不同一定不可以达到。 推荐: 八数码的八种境界—写的不错 需要指出上文中说(境界2)单向宽搜+哈希会超时,但事实证明能ac过。(4608KB,688ms) (hdu1043上是同时多组输入,POJ是单组输入。 两个限时不同。HDU 上反向搜索,把所有情况打表出来。 POJ上正向搜索。) hash需要用到康托展开(—-维基百科)原创 2016-08-12 18:23:06 · 1861 阅读 · 0 评论 -
bzoj1085骑士精神 题解(IDA*入门题)
迭代加搜算法思路 总体上按照深度优先算法方法进行 对搜索深度需要给出一个深度限制dm,当深度达到了dm的时候,如果还没有找到解答,就停止对该分支的搜索,换到另外一个分支继续进行搜索。 dm从1开始,从小到大依次增大(因此称为迭代加深) 迭代加深搜索是最优的,也是完备的 h函数用的是不在应该在的位置上的个数(不计空格)#include <iostream>#include <std原创 2016-08-12 18:31:25 · 369 阅读 · 0 评论 -
POJ2331Water pipe(IDA*)
本来用哈弗曼距离作为h函数,T了。看了大神的博客才知道要先对x轴,y轴预处理h函数。也就是对于终点的ed.x,要在0#include <iostream>#include <stdio.h>#include <algorithm>#include <stdlib.h>#include <stack>#include <vector>#include <string.h>#include原创 2016-08-12 23:49:55 · 328 阅读 · 0 评论 -
hdu5876Sparse Graph(求补图的最短路)
网赛的时候没做出来,后来看题解懂的。 首先将所有节点都放进集合a,表示未求出最短距离。 由于以S为起点,所以dis[S]=0,从集合中将其删除,扔进队列。 每次跑队列的时候,取出首元素u,将集合a遍历一边,如果集合中的元素x与其没有边相连(用set存边,这样可以较快判断),那么dis[x]=dis[u]+1。并将其扔进队列,从集合中删除它。#include <iostream>#includ原创 2016-09-20 15:29:59 · 276 阅读 · 0 评论 -
hihocoder 1251 Today Is a Rainy Day( 2015北京区域赛C题)
首先两种操作,一次性执行完2操作,最后再用1操作比混合着用1操作快。 所以先处理一次性执行操作完2操作, 也就是由123456 –> a1,a2,a3,a4,a5,a6 最多6 ** 6种转移 bfs预处理 最后再执行1操作,但不能每次都比较一次原序列和经过一系列2操作的现在的序列,需要一点技巧。(Tle了4发) 对于每一个数字k,统计它在the final list出现的次数c[原创 2016-10-28 22:19:19 · 458 阅读 · 0 评论 -
cf343dWater Tree(dfs序)
三个操作: 1. 将u及其子树全部灌水,子树就是dfs序in[u]和out[u]中间那一部分 2. 将u及其祖先排水,暴力搞tle了,一点小优化仍然tle,其实只需要将u单点排水即可,因为询问u时,如果u或u的子树的某个节点是空的,那么u一定也应该是排水的(只是没有将它排水,排水的话就超时了)。 3. 询问u时,检查u及u的子树是否全部灌水了。 但,由于操作2,比如样例中的那棵树, 先1号原创 2016-11-18 23:22:17 · 493 阅读 · 0 评论