BFS的小结

写这类搜索题。首先感觉要有个框架。比如我的框架对于BFS来说(对于DFS,我想有两个一个是递归版一个是栈版)。这里是BFS小结。所以介绍一下BFS。我的框架。(也是搜集了网上许多神人的作品。)

1:节点的定义。时间问题。步数。以及一系列其他基本动态属性都放在这里。先定义2个node now和next。

2:map map本身就可以简单地记录可以行走和不可以行走的单纯点。(因为有些还有条件点。)map一开始在外面围一圈不可行走的属性。(这个也是仿照某位大神)这个围一圈直接在初始化的时候全部都是非法的  然后在scanf的时候保留即可。方便快捷。

3:mark 这个标记数组可有可无。假如map不够用的时候加入。记得初始化!

4:dir 我觉得dir真的是很重要。很多不同的走法其实都可以放入在dir之中。根据不同的情况有不同的方向的走法。

5:flag,now的初始化。

框架成熟之后是注意点(搜索的题目往往代码量较大。所以这一点是很重要的):

1:队列清空问题!(有可能上一个测试例中会有残留)

2:终点和可行走点(我喜欢在now的时候判断。即。即使遇到终点也加入队列中取出来的时候统一判断)。

终点和可行走点都是可以加入的,所以我们总是放在一起。一个判断。但是当标记为不可行走的时候。终点假设是X。也被标记成了不可行走(用map标记的时候)。

所以永远都是No!所以在里面还要特判一下加入。比如以下.是可行走。X是终点。

                if(map[next.x][next.y]==‘.‘||map[next.x][next.y]==‘X‘)
                {
                    que.push(next);
                    if(map[next.x][next.y]==‘.‘){map[next.x][next.y] =‘W‘;}
                }

3:next的赋值。请确保每一项都确定过!。

。。。(我还是新手待填充)

一系列不同问题:

1:相同区域个数。(DFS)

2:目标查找。(DFS)

3:规定时间内目标查找。(BFS)

4:查找最近目标(BFS,Rescue,这个正确的解法是目标来查找起点。也就是说我们要有个思维。目标和起点是能互换的。另外。HDU的数据很弱。这个好题啊。这个题目值得讲讲。毒药血药问题。)

。。。(我还是新手待填充)

扩展的BFS问题:

毒药血药问题:有一个点是一个陷阱。又或者是休息亭可以提高你的血量又或者降低你的血量(时间量)。比如Rescue.

时间: 2024-10-28 21:53:57

BFS的小结的相关文章

小结:bfs

概要:我们在初始状态要到达终止状态可以沿着同深度的向下搜索,这样范围覆盖更广,在解的深度较小的时候十分适用. 技巧及注意: bfs很多技巧啊,我来一一列举吧: 注意:存bfs状态时一定要尽量小化状态,只存有效的信息来进行bfs,而不要存整个图进去(QAQ,noip就是这样挂的.当时太弱..) hash判重:在一些bfs题中所有元素的范围(也可以自己映射呗)很小的情况下,我们假设有k个元吧,我们可以考虑用以基于k进制为底数的幂来进行hash,比如[wikioi]1004 四子连棋,[BZOJ]10

网络流小结

这两天复习了下网络流,高中学的ISAP忘得七七八八,干脆把Dinic,ISAP和预流推进都重新看了一遍,写了个简洁的小结(基本上就是给自己看的) 网络流 剩余图 顶点的层次:源点到点的最短路径长度 层次图建立在剩余图基础上 阻塞流:不存在增广路时 FF 复杂度O(n*m*u) 容量网络.流量网络.残量网络 用最大流最小割定理证明 EK 复杂度O(n*m*m) 建反向边,每次bfs找最短增广路 最多增广n*m次(每阶段最多增广m次) Dinic 多路增广 1.初始化容量网络和网络流 2.构造残留网

Nyoj 21 三个水杯(bfs)

三个水杯 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算.现在要求你写出一个程序,使其输出使初始状态到达目标状态的最少次数. 输入 第一行一个整数N(0<N<50)表示N组测试数据接下来每组测试数据有两行,第一行给出三个整数V1 V2 V3 (V1>V2>V3 V1<100 V3>0)表示三个水杯的

小结:最短路

概要: 最短路是个神奇的东西,通过三角不等式,我们可以拓展出很多最短路的延伸.而求最短路的算法一般我用三种,dijkstra.spfa.floyd,第一个用于点少边多的,第一个用于点多边少的,第三个是多源最短路. 应用: 差分约束系统.一般约束条件.最短路等. 技巧及注意: 差分约束:根据三角不等式d(v)<=d(u)+w(u, v),我们通过移项,还可以得到d(v)+w(u, v)<=d(u),而这样就足以解决一些不等式约束集了,即差分约束(在一些情况下,可以考虑最长路的三角不等式).例如[

搜索专题小结及例题:POJ2251&amp;POJ1426&amp;POJ3087&amp;POJ2488

图的遍历也称为搜索,就是从图中某个顶点出发,沿着一些边遍历图中所有的顶点,且每个顶点仅被访问一次,遍历可采取两种不同的方式:深度优先搜索(DFS)和广度优先搜索(BFS). 1.DFS算法思想` 从顶点v出发深度遍历图G的算法 ① 访问v0顶点,置vis[v0]=1,搜索v0未被访问的邻接点w,若存在邻接点w,则dfs(w),直到到达所有邻接点都被访问过的顶点u为止,接着退回一步,看是否还有其他没有被访问的邻接点.如果有,则访问此顶点,进行前述类似的访问,如果没有,就在退回一步进行搜索,重复上述

ACM -二分图题目小结(更新中)

暂时只包括与最大匹配相关的问题. 求最大独立集,最小路径覆盖等等大多数题目都可以转化为求最大匹配用匈牙利算法解决. 1.最大匹配(边集) 此类问题最直接,直接用匈牙利算法即可. HDU 2063  过山车 http://acm.hdu.edu.cn/showproblem.php?pid=2063 二分图最大匹配模版题. ZOJ 1654 - Place the Robots http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode

最短路径算法小结

不同性质的图中,所采取的策略有所不同,自然存在各样的求最短路径的算法. 无向无权图:BFS 有向正权图:Dijkstra 有向无负环图:Bellman-Ford(单点),Floyd-Warshall(任意两点) 有向无环图(dags): 基于动态规划的算法. 广度优先搜索(BFS) 对于无向无权图(也可以假设权值为1),就可以使用最基本的广度优先搜索算法,从源点开始对整个图进行搜索,访问到所有的点.因为广度优先搜索最先访问到的是相邻的点,所以距离最近的点最先访问到,记录的距离也就最小. 算法伪代

迷宫问题(maze problem)——深度优先(DFS)与广度优先搜索(BFS)求解

1.问题简介 给定一个迷宫,指明起点和终点,找出从起点出发到终点的有效可行路径,就是迷宫问题(maze problem). 迷宫可以以二维数组来存储表示.0表示通路,1表示障碍.注意这里规定移动可以从上.下.左.右四方方向移动.坐标以行和列表示,均从0开始,给定起点(0,0)和终点(4,4),迷宫表示如下: int maze[5][5]={ {0,0,0,0,0}, {0,1,0,1,0}, {0,1,1,0,0}, {0,1,1,0,1}, {0,0,0,0,0} }; 那么下面的迷宫就有两条

第一次刷leetcode小结

LeetCode 上不会的 Reverse Integer Single Number II 斐波那契数列 非递归算法 Maximum Subarray 维持最大值 Integer to Roman Sort Colors Populating Next Right Pointers in Each Node 怎么样控制一层 Gray Code Generate Parentheses Binary Tree Postorder Traversal Best Time to Buy and Se