搜索
文章平均质量分 67
SeasonJoe
这个作者很懒,什么都没留下…
展开
-
POJ2362 DFS+剪枝
题意:有一组小棒,这些小棒全用上看能不能拼成一个正方形,可以多个小棒拼成一条边要点:DFS+剪枝,这题才是真正的搜索题,做的我心潮澎湃,相比前面那一题根本就不能算是搜索。原创 2015-12-16 15:19:53 · 421 阅读 · 0 评论 -
POJ2488 A Knight's Journey(DFS)
题意:输入一些棋盘对应的行和列,看骑士(日字)能不能走完整个棋盘,可以从任何地方开始,注意要字典序输出要点:虽然说骑士可以从棋盘上任意一点出发,但因为要按字典序(lexicographically)输出,所以当然从A1出发字典序最小,不用担心为什么任意一点变成A1也行,因为反正是可以走过整个棋盘,那么肯定经过A1,那么其实是连着的一个环,从哪一点出发都无所谓。而且还有对应的走的顺序是要原创 2016-02-23 14:58:06 · 392 阅读 · 0 评论 -
POJ3083 Children of the Candy Corn(BFS+DFS)
题意:普通的迷宫求路径,但这题需要输出三个解:1.沿着左边查找,2.沿着右边查找,3.最短路径要点:最短的简单,直接BFS搞定。沿着左边查找和沿着右边查找其实是一个问题,也即是DFS中先遍历左边还是右边,沿着左边查找就把顺时针查找,如果不成功就向右查找,向右查找一次其实是向前,两次向右,三次向后,反之同理。15191443Seasonal3083原创 2016-02-23 20:25:14 · 323 阅读 · 0 评论 -
POJ3009 Curling 2.0(DFS)
题意:冰壶比赛,球会沿着直线一直运动下去,碰到阻碍会停下,同时阻碍消失,求最小步数要点:DFS的变种,原本的DFS是一步一步的,现在是沿着直线一直下去,其实差不多,就是把直线看成一步就行。因为可以交错,所以不用设visit数组,同时要用回溯法。因为题目上说超过10步就失败,大大减少了时间复杂度,直接搜索每条路线就可以了。15196974Seasonal原创 2016-02-25 10:21:45 · 380 阅读 · 0 评论 -
POJ1426 Find The Multiple(DFS||BFS||同余模定理)
题意:给出一个数,寻找这个数的倍数,要求只能由0和1组成要点:可以用BFS和DFS做,如果用BFS做要用同余模定理,否则因为数字很大,队列要开longlong型会爆内存。用DFS可以避免内存过大的问题,但深度要自己猜一个数,来过oj的数据,有点投机取巧。DFS:15298844Seasonal1426Accepted168K125MS原创 2016-03-22 14:24:38 · 515 阅读 · 0 评论 -
POJ3984 迷宫问题(BFS+记录路径)
题意:迷宫找出口问题,要求输出最短路径要点:普通迷宫找出口问题我倒是会做,但这题要记录路径,所以抓瞎了。看了一下,主要是要用一个队列数组来实现队列,用front指向当前pop出的结点,用rear指向当前入队的结点,通过记录前驱来记录通过的路径,并且通过递归倒序输出数组也就是正序输出路径,注意起点是不包括的。15303623Seasonal3984原创 2016-03-23 15:48:43 · 1340 阅读 · 0 评论 -
POJ3414 Pots(BFS)
题意:给两个不同容量的杯子,要求经过最少的操作使其中一个杯子中有cL水要点:也就是BFS题,只不过这题每个节点有6种方向15304559Seasonal3414Accepted212K0MSC++2024B2016-03-23 19:34:10#include#include#include#define原创 2016-03-23 19:59:11 · 343 阅读 · 0 评论 -
POJ3126 Prime Path(BFS)
题意:从一个素数变到另一个素数,要求每次只能动一位上的数字,并且要求中间值也必须是素数要点:简单的BFS水题,只要将每个节点的变动方向写清楚就行了。15306522Seasonal3126Accepted272K16MSC++1625B2016-03-24 09:38:53#include#include#原创 2016-03-24 09:55:01 · 364 阅读 · 0 评论 -
ZOJ3861 Valid Pattern Lock(DFS||打表+枚举)
题意:手机九宫格锁,共9个数,然后给出规定,只能用给定的n个数做密码,求不同的锁屏方法有几种对于一个点可以走向其他相邻8个方向,对于中间有相互隔开的情况,例如1到3,如果2已经访问过,那么方案是可行的,输出所有锁屏方案路径要点:可以DFS或直接排列判断,排列的话主要的难点在于判断是否合法,因为数据较小,直接打表出要考虑的几种情况,并用一个vis数组对每一个排列从头到尾进行是否走过的原创 2016-03-13 16:29:28 · 298 阅读 · 0 评论 -
POJ2192 Zipper(DP||DFS)
题意:输入三个字符串,看前两个字符串能否组成第三个字符串,要求前两个字符串各自的字母顺序在第三个字符串中保持不变要点:可以用dp或dfs做,下面是dp的思路:首先用定义一个数组dp[i][j],i代表了第一个字符串的第i个字母,j代表第二个字符串中第j个字母,那么可以通过dp[i][j]=1来表示串1的前i个字母和串2的前j个字母可以组成串3的前i+j个字母,如果等于0则说明不可以原创 2015-12-24 22:38:09 · 365 阅读 · 0 评论 -
POJ1383 Labyrinth(树的直径:两次BFS)
题意:给一个迷宫,要求迷宫中最长的路径(就是两点之间的距离最大)要点:树的直径问题,有两种方法:第一种就是两次BFS:先以任意点搜索一次找到最长段的一端v,再以v搜索找到最长段的另一端w,第二次搜索出的就是最长路径。第二种就是DP,用记忆化搜索应该可以写,以后再说。15566071Seasonal1383Accepted5128K719M原创 2016-05-29 09:49:45 · 905 阅读 · 0 评论 -
栈实现迷宫问题
很久没写代码了,主要是现在学了一下JAVA,顺便把上课的内容实现一下。栈实现迷宫问题也就是栈实现dfs,主要是顺便把路径记录在栈里,所以稍微有些复杂,下面是代码:JAVA实现:package com.stack;import java.util.Stack;class node{ int x,y,dir; node(int x,int y,int dir){ this.x=原创 2017-03-29 21:43:03 · 711 阅读 · 0 评论 -
PAT1018 Public Bike Management (30)(最短路径+DFS)
题意:每个自行车车站的最大容量为一个偶数cmax,如果一个车站里面自行车的数量恰好为cmax / 2,那么称处于完美状态。如果一个车展容量是满的或者空的,控制中心(处于结点0处)就会携带或者从路上手机一定数量的自行车前往该车站,一路上会让所有的车展沿途都达到完美。现在给出cmax,车站的数量n,问题车站sp,m条边,还有距离,求最短路径。如果最短路径有多个,求能带的最少的自行车数目的那条。如果还是...原创 2018-04-02 21:59:14 · 183 阅读 · 0 评论 -
PAT1021 Deepest Root (25)(树的最深节点)
题意:给出n-1条边,要求判断能否生成一棵树,并求树中所有以它为根时深度最大的节点。思路:我一开始做的时候就很莽的直接用dfs搜索,就有一个节点超时,其实简单的思考就是如果以1为根,那么就是当前最深的几个点,他们之间的距离也就是树最大的深度。可以这么理解:从1到i距离最远,那么以i为根,到1的距离已经是最远,那只要从1开始找次深的点即可。实现方法就是先dfs一遍找出最深的几个点,在用其中一个再次d...原创 2018-04-05 22:49:31 · 314 阅读 · 0 评论 -
PAT1103 Integer Factorization (30)(DFS:回溯)
题意:给三个正整数N、K、P,将N表示成K个正整数(可以相同,递减排列)的P次方和,如果有多种方案,选择底数n1+…+nk最大的方案,如果还有多种方案,选择底数序列的字典序最大的方案思路:这题看时间和n的大小就知道估计是用dfs做,不过我回溯烂的很,没写出来,下面是参考别人代码写的。注意codeblock中pow返回时会损失精度,pow(5,2)如果用int显示为24,解决方法是+...原创 2018-07-12 20:33:46 · 307 阅读 · 0 评论 -
PAT1131 Subway Map(DFS&&回溯)
题意:找出一条路线,使得对任何给定的起点和终点,可以找出中途经停站最少的路线;如果经停站一样多,则取需要换乘线路次数最少的路线思路:这题就是用dfs+回溯写,我回溯写错了,找到终点的地方回溯了一次,递归回去又回溯了一次,这样就回溯了两次,看别人代码写了一下,这题还有一个地方要注意的就是这个换乘线路,我一开始是很随意的看该点有几条分支,超过2条说明为节点,但实际上这题求的是换乘的次数,完...原创 2018-08-08 20:04:46 · 367 阅读 · 0 评论 -
习题6-5 UVa1600 Patrol Robot(BFS)
题意:机器人走迷宫求最小步数,不同之处在于机器人最多能一次连续穿过k堵墙。要点:BFS模板题稍微有些变换,将vis数组增加到三维来记录穿墙数即可,因为有的时候就算坐标相同,但穿过墙数不同也是不同的。#include#include#include#includeusing namespace std;int map[50][50],vis[50][50][50];原创 2016-03-08 09:11:02 · 409 阅读 · 0 评论 -
POJ2251 Dungeon Master(BFS)
题意:要逃出地牢,地牢是三维的,有上下层之分要点:就是将原本二维的BFS转换为三维的就可以了,求最短距离,这种BFS我还是可以做的15188937Seasonal2251Accepted304K32MSC++1469B2016-02-22 22:10:22#include#include#include#原创 2016-02-22 22:11:45 · 365 阅读 · 0 评论 -
POJ1011 经典DFS+剪枝
题意:给你n个小棒碎片,要求还原原棒长,求最短原棒长要点:经典搜索题,有很多剪枝,很早之前就想做一下,现在终于有水平可以做了,感觉水平还是有进步的,原来根本看不懂,现在好歹看的懂了,主要是各种剪枝实在是比较难想到。从最大的一个碎片开始到碎片总和,一个个DFS是否为原棒长剪枝:1.原棒长必须是总数的因数2.每次一开始从最大的碎片开始遍历,如果一开始的无法搜索成功直接剪掉,原创 2015-12-17 16:47:24 · 506 阅读 · 0 评论 -
N皇后问题与回溯法
八皇后问题,快三个月了,原来不会写现在还是不会,感觉递归还是不理解,每次看别人的代码都要想一下,更不讲自己写了这里明显用到了回溯法,这种递归我看看是没问题的,可以说比较简单,但自己写就难了回溯法要注意一个问题就是:如果在回溯法中用了辅助的全局变量,则一定要把它们恢复原状,特别的,如果函数有多个出口,每个出口都要及时恢复被修改的值这也是比较好理解的,如果递归不成功返回的时候原本的值要恢复原创 2015-12-17 22:42:52 · 2181 阅读 · 0 评论 -
POJ1321 DFS
一个简单的搜索问题,但我还是搞半天搞不出来,递归实在是用不好这题比八皇后难一些,k==n时,就是八皇后问题,但k代码如下:#include#includechar a[8][8];bool col[8];int n,k,tot;void dfs(int x, int row){ if (x == k) { tot++; //每次等于k次数+1 retu原创 2015-12-18 17:20:27 · 337 阅读 · 0 评论 -
UVa 524 素数环(DFS)
比较简单的搜索题,我自己也可以写出来,主要是最后输出的时候不知道怎么写,后来因为输出形式一直WA,UVa的题就是这点不好,输出形式要求太高,而且一律都是WA,不是PE,最后输出形式改了但还是WA,后来发现自己数组开小了,16刚刚好是不够的,下次一定注意数组开的要稍微大一点代码如下:#include#include#includeint n,cur;int a[20];bool v原创 2015-12-18 22:28:42 · 435 阅读 · 0 评论 -
UVa129 相邻重复子串
题意:输入正整数n,l,输出由前l个字符组成的,字典序第k小的没有两个相邻重复子串的串。要点:判断ABCABA是否包含重复子串的方法是这样的:运用回溯法,只要比较当前串后缀,因为回溯法的特性,我们只要考虑当前的情况即可,前面的不用管,这样递归可以保证从头到尾都是成立的,当然后缀要从一个比较到n+1/2个(奇数多考虑一个),例如:ABCABA,先比较A与前面的B,再比较BA与CA,以此类原创 2015-12-20 12:04:28 · 2988 阅读 · 0 评论 -
POJ1014 DFS
题意:一组价值从1到6的弹珠,每个价值对应输入相应的个数,判断能否平均分为两组要点:简单DFS,一开始我直接套用模板超时了,主要原因是我又重新设了一个数组想储存这些对应的价值,这肯定就慢了,其实不需要,对应的i就是价值,所以直接dfs就可以PS:看网上一般都是用背包问题做的,下次研究一下换种方法再做一遍代码如下:#include#includeint n[7];int原创 2015-12-20 15:24:00 · 703 阅读 · 0 评论 -
POJ3278 BFS
题意:输入两个数n和k,n一步可以-1或+1或*2,把n经过一系列变化变成k,计算最小的步数要点:这是我做的第一道BFS题,BFS的特点就是往四周延生,一般同一层次的状态是相同的,用树来举例就是一层层向下,先确保一层完成再往下,用迷宫举例就是如果第一步往上第二步往右,它的状态和第一步往左,第二步往上是相同的,即每一步构成一个集合。一般BFS都是用队列做的这道题还是很好理解的,总共可原创 2015-12-20 21:39:25 · 424 阅读 · 0 评论 -
POJ1088 记忆化搜索
题意:滑雪只能从高的地方滑到低的地方,输入一个二维数组记录了高度,求最长能滑的次数(从一个高度滑到另一个高度记为1)要点:记忆化搜索,就是将DFS和DP结合起来,从当前位置向上下左右深搜,并用DP取最大的那一个,这样从每一个位置得到一个值,最后比较得到最大值代码如下:#include#includeint a[105][105],dp[105][105];int m, n原创 2015-12-21 21:31:12 · 428 阅读 · 0 评论 -
例题6-20 UVa1599 Ideal Path(两次BFS)
题意:看白书要点:因为这次需要找字典序最小的边,所以以前随机打印的方法是不行的,这道题用了一个很巧妙的方法:先从终点倒着BFS,将所有结点到终点的最短步数储存起来,然后直接从起点开始走,再一次BFS,到达每一个新结点时要保证d值恰好-1,选择颜色字典序最小的走,如果有多个最小,就存入队列,下一次再比较新结点选择最小值。这道题还是挺难的,注意因为这题的数据比较大,所以直接用二维数组存储边原创 2016-03-01 14:21:43 · 851 阅读 · 2 评论 -
例题6-12 UVa572 Oil Deposits(DFS)
题意:就是看有几个可以搜索完的块,求连通块,有个专门的算法名:种子填充要点:标准深搜,有上下左右和斜对角的可以用二重循环来表示#include#include#includebool idx[150][150];char map[150][150];int m, n;void dfs(int x, int y){ if (!idx[x][y] || map原创 2016-02-16 12:03:38 · 331 阅读 · 0 评论 -
POJ1564 Sum It Up(DFS)
题意:输入一组数,要求输出总数为t的所有组合要点:因为数最多只有12个,直接暴力搜索就可以了,还有要判断重复,就是与前一个比较,但是其实只是剪枝提升速度,4,3,2,1,2,1这种还是会输出两个4,2,1这种15167723Seasonal1564Accepted164K16MSC++709B2016-02-16 21:40:14原创 2016-02-16 22:24:50 · 415 阅读 · 0 评论 -
POJ2243 Knight Moves(BFS)
题意:输入两组坐标,输出骑士从一个到另一个最少要几步(骑士走日字)要点:标准的BFS题,寻找最短路径,用队列做15170656Seasonal2243Accepted176K16MSC++1099B2016-02-17 17:36:15#include#include#include#includeus原创 2016-02-17 18:17:45 · 506 阅读 · 0 评论 -
例题6-15 UVa10305 Ordering Tasks(拓扑排序)
题意:看白书要点:利用dfs先将最深的赋值给数组中最后一个位置,相同深度的就随便排了,因为只输出一种,所以答案跟题目中给的可以不一样#include#include#includeint c[150],topo[150];bool g[150][150];int m, n,t;bool dfs(int u){ c[u] = -1; //原创 2016-02-18 10:12:05 · 636 阅读 · 0 评论 -
POJ2367 Genealogical tree(拓扑排序)
题意:就是最简单的拓扑排序,裸题要点:裸题,直接模板一套就行15174030Seasonal2367Accepted188K0MSC++734B2016-02-18 17:08:31#include#include#includeint c[150],topo[150];int t,n;bool g[原创 2016-02-18 17:14:57 · 441 阅读 · 0 评论 -
例题6-16 UVa10129 Play on Words(欧拉回路)
题意:输入一些单词,看是否能将这些单词首尾分别对应相同的排成一个序列要点:欧拉道路,也即是从无向图的一个结点出发走出一条道路,每条边恰好经过一次,俗称一笔画,对于无向图来说:如果一个无向图是连通的(任意一个点出发,通过dfs遍历可得到所以顶点),且最多只有两个度数为奇数的顶点,则一定存在欧拉道路。如果有两个奇点,一定从一个奇点出发一个奇点结束;如果奇点不存在,则可以从任意点出发,一原创 2016-02-20 22:12:34 · 456 阅读 · 0 评论 -
L3-015 球队“食物链”(dfs)
题意:某国的足球联赛中有N支参赛球队,编号从1至N。联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场。联赛战罢,结果已经尘埃落定。此时,联赛主席突发奇想,希望从中找出一条包含所有球队的“食物链”,来说明联赛的精彩程度。“食物链”为一个1至N的排列{ T1 T2 ⋯ TN },满足:球队T1战胜过球队T2,球队T2战胜过球队T3,⋯,球队...原创 2018-09-06 18:00:57 · 408 阅读 · 0 评论