DFS/BFS
Cc_Sonia
这个作者很懒,什么都没留下…
展开
-
POJ3026 Borg Maze BFS+最小生成树
这道题其实不难,思路就是将走过的路用直线连起来,就立刻想到了构造一颗树,而树的边权是任意两点间的最短距离,需要用bfs搜索,最后用最小生成树模板套一下就行了。但我主要遇到了三个问题,做了很久才AC: 1. 样例研究了很久没看懂,尤其是第一个,直到突然发现只有在S点和A点处才能“分队”,而不是任何位置。 2. 写bfs的时候,我一开始写的是O(n^2)的复杂度,即任意两点之间都用一次bfs,判TLE了。。然后看了别人的博客,发现只用O(n)的复杂度即可,即每个点进行一次bfs,搜索它到其余各点的最短路径;原创 2020-08-27 21:42:41 · 219 阅读 · 0 评论 -
HDU1010 Tempter of the Bone DFS+奇偶剪枝
一道标准的dfs题,并且需要剪枝,否则会TLE。 奇偶剪枝的原理:两点之间的曼哈顿距离为奇数, 则只能在奇数步内到达,偶数同理。即:假设起点为(sx,sy),终点为(ex,ey),给定t步恰好走到终点,则[abs(ex-sx)+abs(ey-sy)]与t同奇偶。 本题用到的另一个剪枝:可走的步数("."的总数+1("D"算一步))< t 时,直接输出“NO”。 此外,我有一个疑问求大佬们解答:当到达终点但时间不对时,直接判false返回还是继续搜索?我认为应该直接return,毕竟一个点只能走一原创 2020-08-17 17:20:57 · 246 阅读 · 0 评论 -
POJ-3984 迷宫问题 bfs+pair
这道题在bfs求最短路的基础上,要求记录路径,观看了网上大佬的代码Orz,发现巧妙之处在于那个vis数组。 想记录下来主要是因为debug了好久QAQ... 就是for循环中p值改变的问题。。详见注释吧。。 #include<cstdio> #include<cstring> #include<iostream> #include<algorith...原创 2018-07-25 15:00:48 · 259 阅读 · 0 评论 -
51Nod1693 水群 BFS(spfa)+思维
先贴大佬博客Orz:https://blog.csdn.net/xiaobai__lee/article/details/77102431 https://blog.csdn.net/qq_28954601/article/details/78165544 今天才明白。。原来spfa就是bfs。。。我还一直以为很高深难懂emmmmm...原创 2018-08-10 19:05:56 · 198 阅读 · 0 评论 -
HDU4280 Island Transport 最大流SAP+bfs+栈优化
这道题建图并不难,就是个很明显的最大流。 一开始用了SAP(邻接表)算法,果断TLE。。然后就换了一个更高效的模板:SAP+bfs+栈优化,就过了。记录下来又算是一个最大流的模板吧2333 附上AC代码: #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> ...原创 2018-08-20 10:27:34 · 233 阅读 · 0 评论 -
蓝桥杯 历届试题 带分数 DFS
感觉这道题对于初学者来说真的很好,dfs+剪枝+数学。 主要参考的博客:https://blog.csdn.net/lnlnlnying/article/details/53376125 注释都在代码里了,如下: #include<cstdio> #include<cstring> #include<cmath> #include<algorith...原创 2018-05-19 17:53:52 · 304 阅读 · 0 评论 -
UVA1670/Gym-100085K Kingdom Roadmap 思维+dfs
这道题看起来似乎并不难emmmmm... 一开始想的是找度为1的点,互相连边,结果WA了。。后来发现可能有">-<"这种结构,这样很可能左边两点、右边两点互相连,但如果切断中间那条边,图就不连通了,很明显错误的。。 后来听某大佬说,要用dfs搜一遍度为1的点(叶子节点)并标号(相同父亲的节点标号连续);然后从中间分开,前一半和后一半相连。中间有一些细节就不多说了,在代码里体现了。 ...原创 2018-08-23 21:17:55 · 391 阅读 · 0 评论 -
UVALive-4302 Toll Road 思维+dfs+动规
这道题想到用dfs和dp了,,但是不会写QAQ。。后来看了某大佬的代码,太强了Orz 状态转移方程为dp[u]+=max(0,dp[v]+w),另外很巧的一点是先深搜再转移(注意!!!) 附上AC代码: #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #...原创 2018-09-25 18:13:52 · 208 阅读 · 0 评论 -
Gym-101630C Connections 强连通分量Tarjan算法或DFS/BFS
方法一:Tarjan算法 这道题改了好久好久好久...原理不理解果然什么都做不出来啊55555... 先附上大佬博客Orz:https://blog.csdn.net/sinat_35406909/article/details/81318725 Tarjan算法的for循环中,除了!dfn[v]的情况下要标记正向边,反向找边的时候有两种改法: else if(inst[v]) ...原创 2018-10-12 09:49:45 · 378 阅读 · 0 评论 -
蓝桥杯 历届试题 分考场 DFS图着色问题
好久没刷题了。。手残了啊啊啊啊啊...竟然连这么简单的dfs都不会写了55555... 参考博客Orz:https://www.cnblogs.com/looeyWei/p/10439834.html 感觉生疏的地方就是判断返回条件和回溯,感觉这也是dfs最精华的地方了。返回条件是x=n+1,这样n才能被处理过;回溯要注意恢复之前的状态。另外那个room数组很巧妙,表示第i个房间第j个人编号为...原创 2019-03-14 18:46:18 · 362 阅读 · 2 评论 -
POJ1753 + POJ2965 翻牌问题 非DFS方法
POJ1753: 这道题是非常典型的翻牌问题了,网上看的好多是用了dfs,但我不是这么做的。。(这是很久之前看到的一个视频的做法。。)利用二进制思想,只枚举第一行的情况(2^n种),为了到达目的(所有的棋子和第一个棋子状态一样),以行为基准,从第二行开始,第i行中,如果第j列上边的那枚棋子(i-1,j)不符合情况,翻转自身(i,j)。这样前n-1行一定是符合标准的,最后判断第n行,从而判断这种方...原创 2019-04-24 19:24:21 · 353 阅读 · 0 评论 -
POJ1753 + POJ2965 翻牌问题 DFS方法(枚举)
之前写过非DFS方法,附上链接:https://blog.csdn.net/Cc_Sonia/article/details/89432031 今天再回过头用DFS方法,,发现,,好暴力啊。。。就是一个个枚举,看翻还是不翻。。这两道题用DFS就基本没什么区别了,主要是第二道要记录路径。附上两题的AC代码如下:(果然时间慢了好多好多。。) POJ1753: #include<cstdi...原创 2019-05-06 14:41:42 · 271 阅读 · 0 评论 -
POJ3083 Children of the Candy Corn DFS+BFS
这道题最坑的一点是,,G++一直WA,但是C++过了。。。。。EXM????? 一开始我以为可能有不记录方向的方法,但网上一搜发现,,算了还是慢慢做吧。。比较巧妙的是: 1. 把方向用数字表示,避免了字符串后续很烦的操作。 2. DFS时不能用vis数组,用break保证了每步只走一种情况并且不会陷入死循环。 附上AC代码(又丑又长QAQ): #include<cstdio>...原创 2019-05-08 20:54:04 · 276 阅读 · 0 评论 -
POJ3009 Curling 2.0 DFS
果然退步到不行了。。这道dfs并不难,思路也大差不多,就是一直写不对。。。心情复杂.jpg 然后看了别人的写法,要注意几点:1. 一直前进到底时用while不用dfs会更方便(这个可以和之前做的ZOJ1259模拟栈的出栈操作放在一起想,如果某项操作中不会出现别的情况就直接写while而不要递归,否则就一点点来); 2.用sign标记某条路行不行得通,能走再进行后续(一直前进); 3.一个...原创 2019-05-10 22:56:22 · 267 阅读 · 0 评论