DFS、DFS
文章平均质量分 77
KinderRiven
这个作者很懒,什么都没留下…
展开
-
HDU 1043 八数码(A*搜索)
在学习八数码A*搜索问题的时候需要知道以下几个点:Hash:利用康托展开进行hash康托展开主要就是根据一个序列求这个序列是第几大的序列。A*搜索:这里的启发函数就用两点之间的曼哈顿距离进行计算就可以。减枝:在八数码里,任意交换一个空行和一个位置的数字,这个八数码的逆序数是不变的,这样就可以根据目前状态判断是否可达终点状态了。第一次做这个题用的map进行哈希,结果果断超原创 2015-08-18 10:13:02 · 923 阅读 · 1 评论 -
1267 - Network【狂dfs、模拟】
各种dfs按照LRJ书上的思路写就行了#include#include#include#include#include#include#include#includeusing namespace std;const int maxn = 1111;vectorG[maxn];setis_node;int n,s,k;int fa[maxn];int vis[m原创 2015-03-25 15:37:07 · 647 阅读 · 0 评论 -
【CF】D. Arthur and Walls(BFS + 贪心)
D题解题思路就是每次检查2X2的方格里是否只有一个‘*’,如果有的话这个*就需要变成‘.’,利用BFS进行遍历,入队的要求是这个点为.一开始将所有的'.'全部加入队列,如果碰到一个'*'变成'.'就入队,判断的时候从4个方向就行判断题目链接:http://codeforces.com/contest/525/problem/D#include#include#include#原创 2015-03-30 15:54:43 · 845 阅读 · 0 评论 -
【CF】E. Anya and Cubes(双向DFS)
根据题意的话每次递归分3种情况一共最多25个数,时间复杂度为3^25,太大了我们可以分2次求解第一次求一半的结果,也就是25/2 = 12,记录结果之后利用剩余的一半求结果 s-结果 = 之前记录过的结果 就可以时间复杂度降低为 3 ^ (n/2+1)题目链接:http://codeforces.com/contest/525/problem/E#include#incl原创 2015-03-30 17:39:42 · 1078 阅读 · 0 评论 -
11210 - Chinese Mahjong【暴力、模拟、减枝】
模拟题,需要注意2个地方,一个是一种牌只有4张,意外就是 风 牌 和 箭牌 不能组成顺子#include#include#include#includeusing namespace std;const int maxn = 100;int Num[maxn];int Card[20];int _Card[20];int vis[20]; //记录vectorans;原创 2015-03-11 14:58:32 · 537 阅读 · 0 评论 -
705 Slash Maze
图的转化,想了N久没想出来,看了题解发现自己其实想的差不多了,但是想多了(ORZ流泪)把图扩大两倍(就是一个斜杠占2个位置)走8个发现,走斜对角的时候需要特判写完一次就AC了#include#include#includeusing namespace std;const int maxn = 80;const int maxd = 222;const int dir[原创 2015-03-21 17:40:04 · 651 阅读 · 0 评论 -
【uva】1352-Colored Cubes
#include#include#include#include#include#includeusing namespace std;const int maxn = 30;const int maxd = 8;const int INF = 1111;int n,cnt;char cstr[maxn];mapColorList; //颜色结合int Cub[ma原创 2015-03-10 14:06:34 · 413 阅读 · 0 评论 -
165-Stamps【回溯】
回溯给h和k的意思是在k种邮票中选h个邮票基本的连续邮资问题15226160165StampsAcceptedC++0.0622015-03-27 07:21:37#include#include#includeusing namespace std;const int maxn = 2原创 2015-03-27 15:26:31 · 703 阅读 · 0 评论 -
1354 Mobile Computing(暴力、二进制枚举、简直无情)
翘了3节课来A这道题,最后还超时了,也是蛮拼的。。没做出来主要一个方面就是不会一个二进制数子集的枚举这里上一下代码:for(int S0 = S; S0; S0 = (S0 - 1) & S){ }这里S0就是S的子集了~!题目的思路就是枚举所有情况,注意记忆化【话说这题学到了不少】#include#include#include#includeus原创 2015-03-16 16:29:34 · 879 阅读 · 0 评论 -
1533 Moving Pegs[暴力+打表]
这个题不是很难,就是暴力模拟一下,利用二进制表示状态,反正最后一共15种结果,暴力程序跑慢点也没事~,2个程序一个250行的暴力,一个150行的表,也是蛮拼的。。149330001533Moving PegsAcceptedC++0.0092015-02-06 03:15:36暴力程序:#inclu原创 2015-02-06 11:20:19 · 707 阅读 · 0 评论 -
[HDU]5094Maze(状态压缩BFS)
状态压缩的题,第一次WA了,怎么改都不对,交了十几遍,之后重新写了一个,1A了#include#include#include#includeusing namespace std;const int maxn = 51;const int dir[4][2] = {{0,1},{-1,0},{0,-1},{1,0}};int n,m,t;int door[maxn][maxn原创 2014-11-08 23:16:06 · 699 阅读 · 0 评论 -
【HDU】The Ghost Blows Light(树状DP)
大体思路:先求出1 ~原创 2014-09-28 15:38:16 · 556 阅读 · 0 评论 -
【狗狗40】Square Ice
额,简单的BFS,一开始DFS结果栈炸了,加栈也不行 QAQ#include#include#include#includeusing namespace std;const int maxn = 100;const int dir[6][3] ={{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};#define FOR(i,原创 2015-04-22 20:42:20 · 629 阅读 · 0 评论 -
【USACO】Mother's Milk(搜索)
一开始还在想去重的问题,结果发现后台数据貌似没有重复的情况= =/*ID: 18906421LANG: C++PROG: milk3*/#include#include#include#includeusing namespace std;const int maxn = 25;int vis[maxn][maxn][maxn] = {0};vectorans;int原创 2015-04-14 13:18:18 · 790 阅读 · 0 评论 -
【HDU 5335】Walk Out(BFS)
这道题卡时间卡的比较紧。一开始直接BFS 毫无疑问的超时,之后想到根据BFS的常规优化思想,去选择起始点进行遍历。这样我们一开始先BFS一次,这次的BFS是选择出这一点为1并且从起点到这一个点,中间路径的点全为0的点。这样选择出这个点之后,这个点到终点的路径长度就可以断定了。之后我们把所有到终点距离最小的点放在一个容器里进行BFS。这道题没有做出来的原因很大一部分就是对BFS的原创 2015-07-31 10:03:56 · 829 阅读 · 0 评论 -
【CodeForces】E. Xenia and Tree(分块 + LCA)
对于两个操作,对于操作1,每次储存要修改的点,直到存了sqrt(m)个点的时候进行更新,并将图重建一次(重新记录每个点到最近染色点的距离)对于操作2,利用LCA求现在存着的点(也就是还没有更新到图上的点)和这个点的距离的最小值以及这个点在当前图中和最近的染色的那个点的距离。话说LCA真是个好东西= =!这几天补一补去题解在这里:http://codeforces.com/blog/e原创 2015-07-29 19:47:27 · 865 阅读 · 0 评论 -
【HDU 5294】Tricks Device(最短路+最大流)
题目大题:求最多拆几条边图的1 -> n的最小距离不会变求最少拆几条边图的1 -> n的最小距离会变最短路 + 网络流的问题求出最短路径图(包含所有最短路径的图) 之后用m - (拥有最少边数的最短路径) 得到一个解之后将最短路径图中的边重新建图(流量为1)求最大流感觉写的比较麻烦,时间也正好卡着过的。#include#include原创 2015-07-27 20:29:00 · 660 阅读 · 0 评论 -
【HDU 5305】Friends 多校第二场(双向DFS)
根据题意的话最多32条边,直接暴力的话 2 ^ 32肯定超时了,我们可以分两次搜索时间复杂度减少为 2 * 2 ^ 16唯一需要注意的就是对目前状态的哈希处理,我采用的是 十进制表示法跑的还是比较快的,可能是用STL函数的原因增加了一些常数复杂度。#include#include#include#include#includeusing namespace std;t原创 2015-07-27 10:08:04 · 717 阅读 · 0 评论 -
12166 - Equilibrium Mobile(DFS)
枚举每个点,判断其余深度是否存在点的权值为(1 deep1,deep2为2点的深度写的比较麻烦#include#include#include#includeusing namespace std;typedef long long LL;const int maxn = 1000005;char str[maxn];vectorG[20];LL base[20];原创 2015-05-19 08:55:20 · 740 阅读 · 0 评论 -
806 - Spatial Structures(DFS)
没什么思路,难就难在麻烦,各种DFS,挺练基本功的... Problem VerdictLangTimeBestRankSubmit Time | discuss806 - Spatial Structures AcceptedC++0.2720.045902 mins ago原创 2015-05-19 19:21:46 · 844 阅读 · 0 评论 -
【HDU】5254 棋盘占领(BFS)
这题给的不明不白的,一开始不清楚有公共点是几个意思10 1101 可以变成 11直接BFS就可以了#include#include#include#includeusing namespace std;const int maxn = 555;int n,m,ans;int vis[maxn][maxn];int mat[maxn][maxn];int sta原创 2015-06-04 00:25:18 · 740 阅读 · 0 评论 -
【Codeforces】C. Ice Cave(bfs)
我了个草,这个题明明bfs不知道谁挂了个dfs+剪枝的标签。。。从起点bfs一步一步搜,碰到X判断是不是终点,如果是终点就结束,如果为‘.',那么把该位置改成X,坐标入队。#include#include#include#include#includeusing namespace std;const int maxn = 505;const int dir[4][2] =原创 2015-05-15 11:38:04 · 1641 阅读 · 0 评论 -
【USACO】Subset Sums(双向搜索 dfs)
给你一组数 1 ~ N,问你能有几种分法,把他们分成2组,2组的和相等。如果 sum(1 ~ n) 为奇数,直接输出0,负责的话 主要找到 和为 sum / 2的组数 再除以2就是结果因为N 最大为39 如果单向搜索肯定超时,改成双向的就行了/*ID: 18906421LANG: C++PROG: subset*/#include#include#include#inc原创 2015-04-16 18:13:39 · 1046 阅读 · 0 评论 -
[【USACO】The Castle(dfs+枚举)
思路很好像,卡了我很久的就是当最大房间一样的时候判断输出哪个的条件, = = 简直无情/*ID: 18906421LANG: C++PROG: castle*/#include#include#includeusing namespace std;const int maxn = 55;int mat[maxn][maxn][2] = {0}; // 0 1 下 右i原创 2015-04-15 17:30:14 · 988 阅读 · 0 评论 -
【USACO】Wormholes(暴力搜索)
直接按照题意暴力就行/*ID: 18906421LANG: C++PROG: wormhole*/#include#include#include#include#includeusing namespace std;typedef long long LL;const int maxn = 15;LL v[maxn];int next[maxn],connect[原创 2015-04-13 22:02:25 · 808 阅读 · 0 评论 -
【HDU-4277】USACO ORZ(暴搜)
直接dfs暴力,不需要减枝,利用set进行判断重复,hash一下,转化成一个longlong的数保存就好了。#include#include#include#includeusing namespace std;#define MAXD 20 + 5typedef long long LL;int n;LL array[MAXD];setvis;LL ans;void原创 2014-09-25 12:27:57 · 878 阅读 · 0 评论 -
【UVA】620-Cellular Structure(递推)
读错题了一开始。一个细胞每次可以进行3中增值方式,给你一个最终形态,问你达到这个形态之前的那个到这个最终形态是通过哪一种方式得到的。直接递推就可以了,小优化就是如果这个字符串长度为偶数,那么肯定发生了变异。14144659620Cellular StructureAcceptedC++0.0092014-09-04 0原创 2014-09-04 15:52:29 · 741 阅读 · 0 评论 -
【hdu】The Donkey of Gui Zhou(搜索)
一开始的思路是,先走驴子,之后走老虎,每次走的时候记录他们的达到该位置的步数,如果一样就可以相遇,特殊处理末尾。但是没办法过,之后索性让他们一起走,一起修改移动的坐标,结果过了。。。真心不知道错哪了。。116625022014-09-16 00:43:01Accepted474031MS8300K2547 BG++KinderRiven原创 2014-09-16 00:52:37 · 1252 阅读 · 0 评论 -
【uva】225 - Golygons(dfs有坑)
dfs的路径问题,毕竟坑d原创 2014-07-31 18:56:00 · 1181 阅读 · 0 评论 -
八数码
我的天!!这道题看刘汝佳的书首先就原创 2014-04-12 20:09:04 · 721 阅读 · 0 评论 -
POJ Image Perimeters 1111
赤裸裸的DFS,在8个方向遍历,从4个方向加长度#include#include#include#includeusing namespace std;#define MAXD 400 + 10int n,m,x,y;char maze[MAXD][MAXD];int Sum;int dir[8][2] = {{1,0},{-1,0},{0,1},{0,-1},原创 2014-05-17 00:07:39 · 624 阅读 · 0 评论 -
滑雪 POJ 1088
回溯 + DFS#include#include#includeusing namespace std;#define MAXD 100 + 10int R,C;int G[MAXD][MAXD];int d[MAXD][MAXD] = {0}; /*到达 i j 时候的最大长度*/int max_size = 0;#define max(a,b) (a > b ? a :原创 2014-05-18 21:38:07 · 625 阅读 · 0 评论 -
11573 - Ocean Currents DFS变形
每次做这种题总是差一点,也不zhida原创 2014-06-06 13:15:39 · 549 阅读 · 0 评论 -
Knight Moves -uva 简单的BFS遍历
昨天刚学了BFS的遍历,在uva上找了个题敲了出来,感觉还不错,最近敲代码挺有手感的,希望这种状态保持下去#include#include#include#include#define MAX_SIZE 10 + 5#define LEN 100 + 10using namespace std;int dist[MAX_SIZE][MAX_SIZE];/*记录坐标点到起始点的距离原创 2014-03-07 12:25:29 · 661 阅读 · 0 评论 -
Play on Words-uva 精短欧拉回路
思路:先分析,特殊的字母,可能有的字母是当开头个数+1=当结尾个数,那么这个字母一定是开头,同理另一个特殊字母就是作为结尾的之后其余的字母的话只可能是开头=结尾个数,如果有任何一个字母当开头的个数和结尾个数只差为2,那么回路一定不成立!之后是构建DFS遍历遍历的思路就是 用G[i][j]表示字母i,j是连通的!遍历的起点我们分为2个步骤,一个是这个图是个环路第二个是一条线性图原创 2014-03-26 23:03:46 · 562 阅读 · 0 评论 -
Morning Walk-uva 经典的欧拉回路
题目的意思就是“一笔贯穿1->N的环状路线”,这就是经典的欧拉回路问题首先由于是环状的欧拉回路,要求每个节点的值必须为偶数【就是进入次数等于出去次数】第二个就是利用dfs进行遍历,看能否贯穿整个路线,记住要标记节点是否访问过dfs完了记得检验是否有节点没有访问过!,如果有的话说明没有遍历成功/*本题目应该是一个单向的一笔画也就是欧拉回路*/#include#include原创 2014-03-27 21:12:03 · 598 阅读 · 0 评论 -
BFS记忆储存
DescriptionRecently DZB is playing a game called Dot Dot Dot. It's a simple game but very interesting. The rule is like this:The game is played on a N*M grid map, each grid is adjacent with 4 gr原创 2014-04-05 23:52:28 · 599 阅读 · 0 评论 -
548 - Tree uva - 深搜 + 建树
参考:http://blog.csdn.net/shuangde800/article/details/7707713原创 2014-04-15 01:06:57 · 638 阅读 · 0 评论 -
【uva】1600 - Patrol Robot
用一个vis[x][y][z]表示走到x,y的时候 穿过了zdu原创 2014-07-23 14:26:47 · 1994 阅读 · 1 评论 -
1103 - Ancient Messages【后台数据】
#include#include#include#include#include#include#include#define MAXD 500 + 10using namespace std;int m,n,t;char Map[MAXD + 10][400 + 10];int vis[MAXD + 10][400 + 10];char biao[20][10];co原创 2014-07-27 20:52:47 · 1619 阅读 · 0 评论