图论--DFS/BFS
XYZgoforit
这个作者很懒,什么都没留下…
展开
-
POJ 2488 A Knight's Journey (dfs+改变搜索顺序)
题目链接POJ 2488题目大意给定一个n*m的棋盘,一个跳“日”字的马可以从任一个格子开始去遍历棋盘,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径。 棋盘的编号:n(行)方向由递增的数字编号,m(列)方向按递增的字母编号。分析本题是经典的“骑士游历问题”,搜索的入门题。基本思路即枚举起点进行dfs,并记录路径。要注意的是题目要求输出的路径字典需最小,应注意搜索顺序: 1.原创 2017-02-06 11:44:36 · 341 阅读 · 0 评论 -
POJ 2676 Sudoku (数独求解器 DFS)
题目链接POJ2676题目大意输入n个数独,空格用0表示,填数独(符合的一种方案即可)。分析类似于八皇后的简单搜索题,用DFS回溯法求解。 将空格的位置都记录下来,1个1个填下去,填不下去就清空换其他数字。 关键进行可行性剪枝: row[i][j]:记录第i行数字j是否可填 column[i][j]:记录第i列数字j是否可填 block[i][j]:记录第i个九宫格数字j是否可填代码#in原创 2017-02-20 12:05:38 · 316 阅读 · 0 评论 -
POJ 3414 Pots (BFS记录最短路径)
题目链接POJ3414题目大意给出了两个瓶子1号和2号的容量分别为A和B, 以及一个目标水量C,对两个瓶子有如下操作: FILL(i):把i号瓶子装满 DROP(i) :把i号瓶子倒光 POUR(i,j):把i号瓶子的水倒入j号瓶子,直到i号瓶子水倒光或者j号瓶子被倒满 问至少经过几次操作使任一瓶子的水量为C,并记录任一条最短操作路径(Special Judge)。若不可能达到则输出impo原创 2017-02-20 11:44:38 · 270 阅读 · 0 评论 -
POJ 3126 Prime Path (BFS求最少步数)
题目链接POJ3126题目大意给定两个四位素数a,b,求素数a变换到素数b至少经过几次合法操作。 一次合法操作只能改变四位数的其中一位,且操作后得到的四位数仍需为素数。 eg:1033变换到8179可经历如下过程: 1033-1733-3733-3739-3779-8779-8179 至少经历6次操作。分析本题的本质仍是求最少步数问题,因此用BFS解决。 状态:所有四位数 状态转移方式:改原创 2017-02-10 10:17:46 · 280 阅读 · 0 评论 -
POJ 1426 Find The Multiple (搜索)
题目链接POJ1426题目大意给定一个不大于200的正整数,求它的一个非零倍数,要求这个非零倍数每一位均有1和0组成。 注:本题是Special Judge,找到任意一个符合要求的非零倍数都可以分析这道题题目中说这个非零整数的位数在200位以内,看到这句话我一开始被吓住了,以为还要处理大数。后来看了Disscuss知道,由于它这个Special Judge,在unsigned long long内原创 2017-02-10 10:01:24 · 265 阅读 · 0 评论 -
POJ 3278 Catch That Cow (简单BFS)
题目链接POJ3278题目大意输入两个数n,k(0≤\leqn,k≤\leq100000),求从n变换到k至少需要几次合法操作。合法操作包括:+1、-1、*2。分析把0~100000的每个数字看成一种状态,有3种转移状态的方式,只需从n开始用BFS进行扩展,看扩展到k是第几层即可。(类似于迷宫中的最短路) PS:这题在OJ上用G++题解就WA,用C++提交就过了,无语- -!代码#include原创 2017-02-09 19:19:39 · 320 阅读 · 0 评论 -
POJ 1321 棋盘问题(DFS)
题目链接poj1321题目Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。Input 输入含有多组测试数据。 每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目原创 2017-02-09 00:31:33 · 302 阅读 · 0 评论 -
POJ 2251 Dungeon Master (三维BFS)
题目链接poj2251题目大意给定一个三维的地图,‘#’不能走,‘.’能走,求起到S到终点E的最短路。分析这题就是一道求迷宫中的最短路的题,只不过迷宫是三维的,方向数组由原来的4个方向变成了6个方向。直接BFS求距离即可。 PS:虽说是道简单题,但我还是WA了好几次QAQ,原因是我一开始判断格子是否能走的布尔函数是这样写的:bool can(int x,int y,int z){ if原创 2017-02-08 18:27:58 · 231 阅读 · 0 评论 -
POJ 3083 Children of the Candy Corn (DFS+BFS)
题目链接POJ 3083题目大意给定一个迷宫,S是起点,E是终点,#是墙不可走,.可以走。 (1)输出沿着左边墙从起点走到终点经过的格数 (2)输出沿着右边墙从起点走到终点经过的格数 (3)起到到终点的最短路分析这是一道练习搜索的好题。 1.对于沿着某一边墙走: 用dfs来实现,以沿左边墙为例分析: 如何保证我们的路径一直是沿着左边墙走呢?对于每一个状态,我们要按向左走、向前走、向右走、原创 2017-02-07 14:18:53 · 295 阅读 · 0 评论 -
POJ 2386 Lake Counting (DFS-floodfill)
题目链接POJ 2386题目大意给定一个n*m的地图,‘W’表示积水,‘.’表示空地,积水是八连通的,求有多少个积水块。分析本题是典型的求联通块个数的基础题,思路即用floodfill(漫水填充法),扫描一遍图,每遇到一个‘W’计数器加一,并深搜或者广搜把相邻的‘W’填充为‘.’,直到图上没有积水。 本题要注意字符串的输入:要不就用cin,要不就用getchar()处理好换行符。代码#includ原创 2017-02-07 13:38:35 · 302 阅读 · 0 评论 -
HDU 6162 Ch’s gift (树的路径问题 DFS LCA 17多校第九场第2题)
题目链接HDU6162题意输入一棵n(nn(n≤\le105)10^5)个结点的无根树,ii号结点的权值为c[i]c[i]。有q(qq(q≤\le105)10^5)次查询,每次查询格式为:s,t,a,bs,t,a,b,求从ss号结点到tt结点的最短路径所经过的所有结点中权值在[a,b][a,b]范围内的权值和。分析这道题很容易想到暴力的做法: 先把无根树转化为有根树,DFS一遍确定各个结点原创 2017-08-23 19:47:28 · 288 阅读 · 0 评论