DFS\BFS
JinxiSui
退役ACMer
展开
-
UVa - 572 Oil Deposits ( DFS求连通块 )
UVa - 572 Oil Deposits ( DFS求连通块 )水题 数据结构 : 深度优先搜索 DFS题意 输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。如果两个字符“@”所在的格子相邻(横、竖或者对角线方向),就说它们属于同一个八连块。 [ UVa - 572 (VJ) ]思路 每次 通过DFS找到第一个”@”, 在它的八...原创 2017-12-08 20:36:04 · 332 阅读 · 1 评论 -
天梯赛L3 004 - 肿瘤诊断 ( 三维BFS )
思路这里要注意的是L层切片是叠放的, 上下也联通, 所以应当看作是三维的搜索BFS 判断连通块的话基本就是清楚标记就ok, 遍历到之后直接令g[z][x][y] = 0; 参考链接: 【经典/基础BFS+略微复杂的题意】PAT-L3-004. 肿瘤诊断至于用BFS还是DFS的问题呢, 听说DFS这道题会因为递归层数太深爆栈, 先记一下, 等理解了再回来补, 也希望有dalao能...原创 2018-03-21 20:59:05 · 262 阅读 · 0 评论 -
POJ 1321 - 棋盘问题 ( 经典DFS )
题意 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。思路经典DFS 用一个all记录摆放种类, 一个now记录目前为止放了几个棋子, 当now == k时 all++, return;AC代码#includ...原创 2018-03-28 11:07:03 · 151 阅读 · 0 评论 -
UVa 10336 - Rank the Languages ( DFS )
题意各国语言统计, 类似连通块, 但只有上下左右四个方向, 斜对角不算连通 最后按照语言使用人数按照从大到小排序输出, 人数相等的按照字典序输出思路只走上下左右四个方向的DFS连通块 用一个abs就能巧妙转化for( int dx = -1; dx <= 1; dx++ ){ for( int dy = -1; dy <= 1; dy++ ){...原创 2018-02-27 17:08:23 · 290 阅读 · 0 评论 -
POJ 3984 - 迷宫问题
题意定义一个二维数组表示迷宫, 0为通道, 1为墙壁 左上(0,0)为迷宫入口, 右下角(4,4)为出口 求最短路的坐标( 输入保证有且只有一个最优解 )思路BFS 二维数组maze[][]存的是迷宫图 二维数组vis[][]用于标记该位置是否曾经走过(如果走过, 那么第一次踩到该位置的走法是最短路) 数组pre[]存放的是改点前驱AC代码#include...原创 2018-03-05 18:56:36 · 196 阅读 · 0 评论 -
UVa 439 - Knight Moves (BFS)
题意8*8国际象棋, 骑士有八个移动方向, 求最短需要走几步 思路BFS模版 方向根据实际情况调整一下即可AC代码#include <iostream>#include <cstdio>#include <cstring>using namespace std;int k[10][10], vis[10][10],...原创 2018-03-05 20:49:02 · 186 阅读 · 0 评论 -
UVa 1600 - Patrol Robot ( BFS )
题意 机器人要从一个m*n(1≤m,n≤20)网格的左上角(1,1)走到右下角(m,n)。网格中的一些格子是空地(用0表示),其他格子是障碍(用1表示)。机器人每次可以往4个方向走一格,但不能连续地穿越k(0≤k≤20)个障碍,求最短路长度。起点和终点保证是空地。思路BFS 加一个维度记录机器人已经穿越了几层障碍AC代码新手代码写的还是比较冗长了 献丑...原创 2018-03-06 11:20:52 · 218 阅读 · 0 评论 -
UVa 10562 - Undraw the Trees ( DFS )
题意看图写树思路DFS递归AC代码(学习紫书)#include <iostream>#include <cstdio>#include <cstring>#include <cctype>using namespace std;const int maxn = 200 + 10;char tre[m...原创 2018-03-06 12:43:11 · 167 阅读 · 0 评论 -
UVa 816 - Abbott's Revenge ( BFS )
题意最多有9*9个节点的迷宫, 这个迷宫特殊的是, 每个节点可走的方向是特定的. 比如 1 2 WLF * 这个指令的意思是若朝向西来到点(1,2), 可以选择左转或直走 思路BFS 一开始用数组做的模拟, 上交RE了, 不知道原因是什么 学习紫书写法, 利用队列和结构体AC代码#include <iostream>#include <q...原创 2018-03-06 19:18:34 · 289 阅读 · 0 评论 -
UVa 10129 - Play on Words (欧拉回路, DFS)
题意单词链接, 如acm, malform, mouse可以链接思路欧拉回路 1.图连通 2.图中所有点的出度==入度,或只有两个奇度点并且一个点的入度比出度大1(终点),另一个点的出度比入度大1(起点)调试的时候遇到几个比较坑的数据 需要特殊处理判断一下 input 3 2 aa aaa 1 ab 2 a...原创 2018-03-07 17:56:05 · 188 阅读 · 0 评论 -
UVa 10410 - Tree Reconstruction ( DFS, BFS, 栈 )
题意给出一棵树的BFS, DFS遍历 (扩展节点时按照编号从小到大访问) 求每个节点的子节点序列思路记录DFS序列中每个节点的位置, 由BFS得出两个节点的距离如果距离为负, 说明既不是兄弟或孩子节点 如果距离为正且相邻, 说明是兄弟节点 如果距离为正但不相邻, 说明是孩子节点用栈处理递归过程AC代码#include <iostream>...原创 2018-03-08 18:03:22 · 259 阅读 · 0 评论 -
UVa 208 - Firetruck (回溯)
题意给出一个无向图和终点的编号 按字典序枚举出从1到终点的路径思路要事先判断结点1是否可以到达结点k, 用一个bool judge()函数判断一下从终点能否回到1点即可. 如果无解直接输出有0种走法 有解则用dfs即可. 因为每种走法里一个编号只能走一次, 用一个数组m[]标记是否走过. 记得每次标记之后进入dfs(), 出来之后要清除该标记, 以防影响程序后面的判断 DFS...原创 2018-03-10 20:24:14 · 226 阅读 · 0 评论 -
UVa 225 - Golygons ( DFS, 回溯, 剪枝 )
题意平面上有k个障碍点。从(0,0)点出发,第一次走1个单位,第二次走2个单位,……,第n次走n个单位,恰好回到(0,0)。要求只能沿着东南西北方向走,且每次必须转弯90°(不能沿着同一个方向继续走,也不能后退)。走出的图形可以自交,但不能经过障碍点AC代码#include <iostream>#include <algorithm>#include...原创 2018-03-11 19:51:30 · 331 阅读 · 0 评论 -
HDU 3478 - Catch ( 二分图DFS涂色 )
题意小偷在跑路,如果他t时刻在u街区,那么他在t+1时刻出现在v街区的条件是,u和v街区之间有一个街区把两个街区隔开。 问,是否有某一个时刻小偷可能出现在所有城市。思路如果小偷有某一个时刻可能出现在所有城市,首先我们一定要确保整个图是连通的,如果整个图不是连通的,则肯定有城市小偷无法抵达。可以用并查集 判断图是否连通。 但是本题输入保证图连通,故不需要再判。 如果说u,v街区之...原创 2018-03-15 17:05:26 · 253 阅读 · 0 评论 -
PTA - 拯救007 ( BFS )
在老电影“007之生死关头”(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 —— 直接踩着池子里一系列鳄鱼的大脑袋跳上岸去!(据说当年替身演员被最后一条鳄鱼咬住了脚,幸好穿的是特别加厚的靴子才逃过一劫。) 设鳄鱼池是长宽为100米的方形,中心坐标为 (0, 0),且东北角坐标为 (50, 50)。池心岛是以 (0,...原创 2018-03-19 19:41:27 · 2181 阅读 · 1 评论 -
UVa 548 - Tree (二叉树遍历, DFS)
题意给出一棵带权二叉树的中序和后序遍历 找一个叶子使得它到根的路径上的权和最小。 如果有多解,该叶子本身的权应尽量小思路学习了一下紫书给的思路和代码先根据中序和后序遍历构造二叉树 根据后序遍历找到树根,然后在中序遍历中找到树根,从而找出左右子树的结点列表,然后递归构造左右子树。 最后用DFS求最小权和AC代码#include <iostream&g...原创 2018-02-10 15:31:49 · 233 阅读 · 0 评论 -
天梯赛L3 015 - 球队“食物链” (DFS剪枝)
某国的足球联赛中有N支参赛球队,编号从1至N。联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场。 联赛战罢,结果已经尘埃落定。此时,联赛主席突发奇想,希望从中找出一条包含所有球队的“食物链”,来说明联赛的精彩程度。“食物链”为一个1至N的排列{ T1 T2 ⋯ TN } 现在主席请你从联赛结果中找出“食物链”。若存在多条“食物链”,请找出字典序最小的。 注:排列...原创 2018-03-20 20:56:29 · 359 阅读 · 0 评论