
图论--DFS
focus_best
这个作者很懒,什么都没留下…
展开
-
POJ 2676 Sudoku(DFS回溯)
POJ2676 Sudoku(DFS回溯)http://poj.org/problem?id=2676题意:给你一个9*9的数独棋盘,但是该数独未填完,你输出完整的数独解.分析:其实本题最快的方法应该是用Donald Knuth提出的舞蹈链.具体可见刘汝佳:训练指南第六章.DFS回溯构造,不过我们按从上到下,从左到右填(1-9)个数字,但是我们怎么知道我们当前填的数是否合法呢?原创 2014-05-30 21:04:23 · 1703 阅读 · 0 评论 -
POJ 2362 Square(DFS回溯构造)
POJ2362 Square(DFS回溯构造)http://poj.org/problem?id=2362题意:给你M根长度可能不同的棍子,问你用着M根棍子能否拼成一个正方形.分析:首先将M根棍子的总长sum求出,sum%4必须==0且任意一个棍子的长度 用vis[i]数组表示当前第i根棍子是否被使用了. 然后用dfs来判断能否构成正方形的三边即可.其中原创 2014-05-29 22:24:47 · 2374 阅读 · 0 评论 -
POJ 3620 Avoid The Lakes(简单DFS求连通分量)
POJ 3620 Avoid The Lakeshttp://poj.org/problem?id=3620题意:有一个N行M列的网格,其中有干的格子和有水的格子,现在要你求出网格中最大的全部由有水格子组成的4连通分量包含多少个格子?分析:直接用DFS做,从每一个未被标记的水格开始做一次DFS,记录此次DFS所走过的所有水个数cnt,然后用cnt更新ans即可.(如果用BFS做也是原创 2014-05-10 16:15:57 · 856 阅读 · 0 评论 -
POJ 2034 Anti-prime Sequences(素数预处理+DFS回溯)
POJ 2034 Anti-prime Sequences(素数预处理+DFS回溯)http://poj.org/problem?id=2034题意:给你一个n,n+1,n+2,n+3,…m的数字序列,要你重新安排该序列的顺序,使得任意连续i个(2分析: 首先用筛选法预处理出1000*10以内的所有素数,然后再用dfs回溯构造出字典序最小的合法序列. 其原创 2014-05-29 12:27:50 · 1385 阅读 · 0 评论 -
POJ 1024 Tester Program(DFS:求单源最短路径)
POJ 1024 Tester Program(DFS求单源最短路径)http://poj.org/problem?id=1024题意:现在有一个迷宫,我们给出一条最短路径,然后继续给出这个迷宫的墙的构造方式,要你检查最短路径是否唯一且 这些墙是不是有多余?分析:仔细体会如何用DFS一次求出单源最短距离. 首先我们根据上面给的最短路径和墙的信息构图(具体看代码,仔细原创 2014-05-09 19:44:56 · 1928 阅读 · 1 评论 -
POJ 2922 Honeymoon Hike(DFS/BFS+二分+枚举区间)
POJ2922 Honeymoon Hike(DFS/BFS+二分+枚举区间)http://poj.org/problem?id=2922题意:给你一个N*N的网格,并给出网格中每个点的海拔高度,现在要你找出从左上角到右下角那个点的一条路,且这条路所有点中,最高海拔-最低海拔之差最小。输出该最小值。分析:(本题还可以用BFS实现,不过在下一道题目POJ2110用BFS实现本题,这两道题原创 2014-05-17 21:38:18 · 1220 阅读 · 2 评论 -
POJ 1562 Oil Deposits(DFS:求八连通分量个数)
POJ 1562 Oil Deposits(DFS)http://poj.org/problem?id=1562题意:输入是一个R行C列的字符网格,表示油田,问你这个网格中有多少个由油田构成的连通分量.其中上下左右对角线相邻的网格油都算一个连通分量.分析:典型的DFS,我们只需要对于网格中的每个油格,做一次DFS即可.(且还需要该油格之前没有被走过).AC代码:#include原创 2014-05-09 20:23:42 · 905 阅读 · 0 评论 -
POJ 1426 Find The Multiple(DFS构造)
POJ 1426 Find The Multiple(DFS)http://poj.org/problem?id=1426题意:给你一个[1,200]之间的整数n,要你求它的一个非0倍数m,这个m的十进制数只包含0和1.m不超过100位.分析:本题用常规思维去考虑这个100位就会很麻烦,因为题目中给的所有实例都是有unsigned long long的解的(这点我也是看别人题解的出原创 2014-05-07 20:32:08 · 794 阅读 · 0 评论 -
POJ 3083 Children of theCandy Corn(DFS and BFS)
POJ 3083 Children of theCandy Corn(图论:DFS)http://poj.org/problem?id=3083题意:有一个迷宫,要你求分别算出从迷宫起点到终点的3种距离:优先左转,优先右转,以及最短距离。保证左转和右转一定能从起点到达终点的。分析:又是一道题意模糊的题目。 首先我们要确定虽然题目中没说,但是左转优先的时候如果走不通就往上原创 2014-05-08 18:07:51 · 762 阅读 · 0 评论 -
POJ 2386 Lake Counting(DFS:求8连通分量的个数)
POJ 2386 Lake Counting(DFS:求8连通分量的个数)http://poj.org/problem?id=2386题意:给你一个N*M的字符网格,要你求该网格中有多少个有字符’w’构造的8连通分量.分析:直接DFS求出连通分量个数即可.之前很多题目与本题类似.AC代码:#includeusing namespace std;const int maxn=原创 2014-05-10 17:01:12 · 1038 阅读 · 0 评论 -
POJ 2243 Knight Moves(BFS或DFS)
POJ 2243 Knight Moves(BFS实现或DFS实现)http://poj.org/problem?id=2243题意:一个8*8的中国象棋棋牌,给你两个坐标,问你马从起点走到终点最少需要几步.(马可以朝4个方向8种走法,只能走日字,具体见代码)分析:首先用BFS实现.AC代码: 0ms#include#include#includeusing nam原创 2014-05-09 21:25:35 · 1729 阅读 · 1 评论 -
POJ 1573 Robot Motion(DFS)
POJ 1573 Robot Motion(DFS)http://poj.org/problem?id=1573题意:给你一个R*C的棋盘字母矩阵,该矩阵只由N,S,E,W 4个字母构成,分别表示机器人如果走到当前点将往哪个方向走下一步.然后给了你机器人的入口位置(始终在最上一行的某一列做入口),要你输出机器人在该字符矩阵中的行走状况:几步能走出棋盘或者要进入一个几步的死循环.分析:网原创 2014-05-29 21:04:01 · 996 阅读 · 0 评论 -
POJ 1111 Image Perimeters(DFS)
POJ 1111 Image Perimeters(简单DFS)http://poj.org/problem?id=1111题意:(L又是一道题意复杂的简单题)给你一个R*C的仅有字符’.’(表空格)和字符’X’(表物体)构成的棋盘,现在在给你一个坐标(从1计数),要你算出这个与这个坐标点相连的所有’X’构成物体的外表面周长.如上的棋盘,构成了两个X物体,其中下面那个小的外周长为4原创 2014-05-29 19:53:39 · 1039 阅读 · 0 评论 -
HDU 4536 XCOM Enemy Unknown(DFS+回溯构造)
HDU 4536 XCOM Enemy Unknown(DFS+回溯构造)http://acm.hdu.edu.cn/showproblem.php?pid=4536Problem DescriptionXCOM-Enemy Unknown是一款很好玩很经典的策略游戏.在游戏中,由于未知的敌人--外星人入侵,你团结了世界各大国家进行抵抗.随着游戏进展,会有很多的外星人进攻事件.原创 2014-06-09 15:00:08 · 973 阅读 · 0 评论 -
HDU 1010 Tempter of the Bone(DFS回溯+剪枝)
HDU 1010 Tempter of the Bone(DFS回溯+剪枝)http://acm.hdu.edu.cn/showproblem.php?pid=1010题意:给你一个N*M的迷宫和一个时间T,迷宫中为X的格子是不能走的,现在给你起点和终点.问你能不能在正好T秒的时候从起点到达终点,且不能走回头路.分析:我感觉本题用BFS应该也挺好解决的,不过要注意利用代价函数h()来剪原创 2014-06-09 16:10:20 · 813 阅读 · 0 评论 -
HDU 4403 A very hard Aoshu problem(DFS)
HDU 4403 A very hard Aoshu problem(DFS)http://acm.hdu.edu.cn/showproblem.php?pid=4403题意:给你一串数字,你要在该串数字中间的某些位置加一个等号=和一个或多个+号,使得那串数字编成一个等式.问你有多少种方式?分析:本题需要多加回顾. 首先我们可以注意到=号有且只有一个,+号可能有多个或没原创 2014-05-31 11:10:39 · 940 阅读 · 0 评论 -
HDU 1045 Fire Net(DFS回溯)
HDU 1045 Fire Net(DFS回溯)http://acm.hdu.edu.cn/showproblem.php?pid=1045题意:给你一个N*N的棋盘,棋盘中有空白格和墙’X’,现在要你在空白格上放大炮,要求任意两个大炮不能在同行或者同列,除非他们之间有一个’X’墙.问你最多能放几门大炮.分析:本问题与8皇后问题有一点点类似.八皇后问题是对于每行的情况看放哪个位置,原创 2014-06-09 17:21:17 · 1113 阅读 · 1 评论 -
HDU 1501 Zipper(DFS)
HDU 1501 Zipper(DFS)http://acm.hdu.edu.cn/showproblem.php?pid=1501题意:给你3个字符串A,B和C.问你由字符串A和B的字符能否构成C字符串.你可以任意组合A和B的字符,但是A中或B中所有字符间的相对位置不能改变.且C字符的个数=A字符个数+B字符个数.分析:直接DFS构找出C字符即可,对于当前DFS,我们保存当前正在原创 2014-06-09 18:48:57 · 917 阅读 · 0 评论 -
HDU 1044 Collect More Jewels(BFS+DFS)
HDU 1044 Collect More Jewels(BFS+DFS)http://acm.hdu.edu.cn/showproblem.php?pid=1044题意:给你一个R*C的棋盘迷宫,要求你在t时间走出迷宫且输出你能获得的最大珠宝价值和.分析: 首先我们可以知道图中的有效点只有3种:起点,所有宝珠,终点.其中起点我们编号为0,珠宝编号为1到M,终点编号为M原创 2014-06-09 21:11:27 · 1010 阅读 · 0 评论 -
HDU 1016 Prime Ring Problem(DFS回溯+素数判断)
HDU 1016 Prime Ring Problem(DFS回溯+素数判断)http://acm.hdu.edu.cn/showproblem.php?pid=1016题意:给你一个n,要求输出所有由1,2,3…n构成的素数环。所谓素数环就是该环中的任意相邻两个数的和是一个素数。且按字典序从小到大输出。分析:本题在刘汝佳的入门经典里也有。首先利用素数筛选法求出100以内的所有素数原创 2014-06-10 10:43:50 · 886 阅读 · 0 评论 -
POJ 1664 放苹果(DFS)
POJ 1664 放苹果(DFS)http://poj.org/problem?id=1664题意: 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。分析:注意到盘子是一样的,方法5 1 1 和1 5 1 只能算一种.所以我们需要给每个盘子放的苹果数定序. 也就是说我们从少往多放,原创 2014-05-29 17:36:09 · 1122 阅读 · 0 评论 -
POJ 1321 棋盘问题(DFS回溯)
POJ 1321 棋盘问题(DFS回溯)http://poj.org/problem?id=1321题意:要在n*n的不规则棋盘(棋盘上可能有不能放棋子的格子)上放k(k分析:类似于8皇后问题,可以同样的dfs回溯构造.令cnt表示当前我们已经放了几个棋子了,且我们放棋子是从上往下放的(即从行号小的行放到行号大的行).这样我们就保证我们放棋子的时候行号不会重复.接下来用vi原创 2014-05-29 16:51:48 · 1022 阅读 · 0 评论 -
POJ 1088 滑雪(DFS+DP)
POJ1088 滑雪(DFS+简单DP记忆化搜索)http://poj.org/problem?id=1088题意:给你一个R*C的数字矩阵,要你找出矩阵中一条递减的最长路径的长度.即从矩阵的一个点出发,只能走数字递减的上下左右4格中的一格,能走的最长距离(包括起点).分析: 首先我们令len[r][c]表示从(r,c)点出发的最长路径长度. 可以知道如原创 2014-05-29 18:22:47 · 1081 阅读 · 0 评论 -
HDU 4707 Pet(DFS:树深度相关)
HDU4707题目描述:给出一个具有N(0输入:首先是一个T(0输出:输出距离0号节点距离大于D的节点总数。分析:从0号节点开始做一次DFS,记录距离大于D的节点数即可。#include#includeusing namespace std;const int maxn=100000+100;vector G[maxn];int sum,n,d;原创 2014-01-15 00:06:24 · 959 阅读 · 1 评论