![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索
文章平均质量分 72
AcDora
这个作者很懒,什么都没留下…
展开
-
UVa10004 Bicoloring (dfs水题)
这个题目的意思就是用两个颜色给图中每个点涂色,使相邻的点颜色不同。如果能有一个这样的方案,那么就输出"BICOLORING." 否则输出"NOT BICOLORING."。 数据规模是n最大为200.很典型的搜索题目代码如下:#include #include const int N = 210;int n, l, map[N][N];int vis[N];bool dfs(原创 2013-02-16 20:59:57 · 772 阅读 · 0 评论 -
Codeforces 242C King‘s Path(BFS+STL)
题目:给出一些可以走的点,这些点是一段一段的形式给出的,比如第5行的第1个格子到第4个格子是可以走的点。第二比较特别的是数据特别大,10^9的规模!果断是数组以及链表很难解决的东西呀!尤其是标记这部分!所以,map是必备的。用map不仅去标记是否允许走,还可以表示是否走过,并且存储可行点到起点的最短距离。代码:#include #include #include #include原创 2013-04-11 22:29:40 · 1196 阅读 · 0 评论 -
UVa 11624 Fire!(BFS)
这是一道比较基础的BFS的题目。和其他题目不同的是,这道题需要初始化一下每个格子起火的时间。这几天参加比赛,发现,算法死套模板真的不对,要灵活运用,发挥自己智慧的大脑,才能有更优秀的算法的应用!还有,分析问题的能力也真的很重要,一道题目可能说得很长,但是最有用的只有那么几句话,从那几句话中再提炼出来一些实质性的东西,就是解题的思路了!想这道题,实际上就是两次求最短路径,第一次求最短路径原创 2013-04-14 21:19:09 · 915 阅读 · 0 评论 -
UVa 10047 The Monocycle (BFS + 状态判重)
题目:矩阵中一共是四种点,起点,终点,路,墙。一个轮子,只能往前走,这个轮子的轮胎被分为5个部分,每个部分是一个颜色,求的是从原点走到终点,并且在终点的时候轮子着地的颜色和在起点的时候的颜色是一致的,最少多少步。对于搜索,有的是对图搜索(树划归为图),有的是隐式图搜索。图的搜索还是比较好办,主要是对于隐式图的搜索,是比较有难度的。最近做过的题目中,对于隐式图的搜索大多都是基于状态作为节原创 2013-04-15 19:48:03 · 1221 阅读 · 0 评论 -
UVa 532 Dungeon Master( BFS )
感觉自己就是一个马虎妞,又是细节的问题,真是不应该的!以后写程序一定要注意了!这个题没什么特别的,就是三维数组,每次出了能走平面以外,还可以走上下的这种!Ok!细节见代码吧!#include #include #include using namespace std;const int N = 35;const int INF = 10000000;char dun[N][N]原创 2013-04-19 12:49:47 · 1230 阅读 · 3 评论 -
UVa 572 Oil Deposit (DFS)
so easy!#include #include #include #include using namespace std;const int N = 110;int n, m, ans;char g[N][N];int a[] = { 0, 0, 1, -1, 1, -1, -1, 1 };int b[] = { 1, -1, 0, 0, 1, -1, 1, -1 }原创 2013-04-20 19:52:12 · 803 阅读 · 0 评论 -
UVa 10012 How Big is It? (计算几何+DFS)
可以说这道题目,涉及了很多知识点,是一道很好的题目。首先这道题涉及了计算几何的知识,求圆心坐标的横距离进而求出圆心坐标;其次,这道题目数据不大,很容易想到dfs;最后这道题涉及到了全排列!理论上这道题还可以剪枝,步骤也不是很麻烦,但是不剪枝也是可以过的!下面说一下我最开始的想法,这个想法很麻烦,最后wa了,简单说一下,就是从右向左判断,一次和圆相切,算出坐标,然后假定这个坐标,然后继续向左原创 2013-04-29 09:26:01 · 966 阅读 · 0 评论 -
UVa 657 The die is cast(DFS)
双层DFS, X数量绝对不超过6个,所以毫无疑问,双层就可以解决掉!#include #include #include #include using namespace std;const int N = 55;int n, m, numx, cnt, ans[N*N];int a[] = { 0, 0, 1, -1 };int b[] = { 1, -1, 0, 0 };原创 2013-04-20 20:34:42 · 864 阅读 · 0 评论 -
UVa 784 Maze Exploration(DFS)
这道题比较难办的是输入,有空格,要用gets();然后就是本小妞有马虎了,多写了一个else,结果半天没有音讯!还有就是,使得这个点不超范围,范围是要用&&来判断的,今天耍小聪明||了一下果断错了!然后‘-’和‘_',减号和下划线今天还打混了!!!这些都要注意了代码:#include #include #include #include using namespace std;原创 2013-04-20 21:48:53 · 943 阅读 · 0 评论 -
UVa 872 Ordering(拓扑排序输出全部路径)
给出一些大小的条件,要求写出所有满足拓扑次序的排列。按照字典序输出。首先要总结一下:每次提交之前都要先检查一下题目中要求的输入和输出,看看自己的代码有没有满足这些要求!然后说一下题目的思路:第一,用邻接表进行存储,在输入边的同时,要计算每个点的入度,根据拓扑的性质,要在所有前驱结点都遍历了之后才能边当前节点,我们每次都要找到没有前驱结点的点放到序列的尾部。第二,在实现的过程中,dfs来实现原创 2013-05-15 18:09:21 · 1885 阅读 · 0 评论 -
uva 10507 Waking up Brain( 搜索 )
题目:一个图,源点有三个,每个点被遍历的条件是这个点和三个已经遍历过的点相连!初始的时候,有三个点是已经遍历过的,问每个点被遍历的时间!分析:我选择广度优先搜索。对每一个和遍历过的点相连的进行判断,判断是否和三个以上的遍历过的点相连,如果是,那么把它加入队列,同时它wake时间是所有与它相连的并且已经遍历过的点的第三小的时间加1(这个要自己好好考虑,仔细读题)。然后把这个点设为已遍历!代码原创 2013-05-12 13:46:18 · 1000 阅读 · 0 评论 -
HDU 2553 N皇后问题( DFS + 剪枝 )
必要要先说一下:位运算,真TM强大呀!!!!8皇后的问题,衍生出来的N皇后的问题,我开始真的是按行暴搜,唯一优化的是用二进制来判断对角线和列上是否有皇后。必然超时。研究了一下大牛的代码,位运算被神一样的运用!ORZ!剪枝:1、一个数和它的负数取与,得到的是最右边的1!负数在计算机里面的表示是原码取反加1,可以试一下,确实是得到最右边的。这样就可以简化for循环,免得一位一位原创 2013-04-11 11:03:50 · 1762 阅读 · 0 评论 -
UVa 10651 Pebble Solitaire (DFS)
题目:有一些格子,这些格子都是挨着的,并排摆放的,有的格子里面有石子,有的没有,当满足一下条件的时候,就会做一下的操作: 条件:用1表示有格子,0表示没有。如果连续的三个格子的状态是011,就把它给成100, 相当于将最后边的1放到最左边,然后去掉中间的那个1;如果是110,就改成001,即将最左的1放大最右,然后去掉中间的那个。分析:还是搜索。这道题,一共只原创 2013-04-10 21:29:43 · 768 阅读 · 0 评论 -
UVa10305 Ordering Tasks(拓扑排序水题)
这道题很显然是拓扑排序,很水的题。一种是dfs方法,另一种是不用dfs代码如下:dfs:#include #include const int N = 110;int n, m, c[N], topo[N], t, map[N][N];bool dfs(int u) { c[u] = -1; for ( int v = 1; v <= n; ++v ) if( m原创 2013-02-16 22:05:12 · 777 阅读 · 0 评论 -
UVa 10946 Do You What Filled? (DFS)
很显然,数据这么小,dfs必然会过的 按上下左右搜,然后搜过的标记一下,避免重复,就哦啦代码如下:#include #include #include using namespace std;const int N = 55;int n, m, id;char g[N][N];bool vis[N][N];struct node { char x;原创 2013-02-19 20:32:10 · 563 阅读 · 0 评论 -
Uva 383 Shipping Routes ( BFS )
这道题求最短路径,每条路径的权值是一样的,所以BFS就够了只是输出要恨注意一下,比较复杂,空格空行,尤其是DATA 后面的代号,要有两个空格代码:#include #include #include #include #include #include using namespace std;const int N = 35;const int INF = 10000原创 2013-03-02 22:01:07 · 732 阅读 · 0 评论 -
UVa 280 Vertex ( dfs搜索 水题 )
有向图搜索,水题代码:#include #include const int N = 110;int n, g[N][N], vn;bool vis[N];void dfs( int x ) { for ( int i = 1; i <= n; ++i ) if ( !vis[i] && g[x][i] ) { vis[i原创 2013-03-15 19:12:18 · 1163 阅读 · 0 评论 -
UVa 321 The New Villa ( BFS + 状态压缩判重)
题意:有几个房间,从一个房间开始走,进入另一个房间的要求是灯要亮着,而且两个房间之间是连通的。题目会给出房间的控制开关,也就是哪个房间的开关可以控制哪一个房间的开关。输入有房间数,房间的连接数,和开关控制数,要求从走廊开始,走到卧室,而且最后只有卧室的灯是开着的,别的房间的灯都是关着的那么这道题要注意的是,一个操作是一步,要求输出走到卧室的最少操作,以及操作的顺序关键在于建图和判重,其他的原创 2013-03-13 20:36:33 · 1069 阅读 · 0 评论 -
UVa 11244 counting stars ( 搜索 BFS)
这道题,我承认特别水,但是我提交了第四次才过各种错误,前两次是测试数据的输出没有注释掉,后一次是把数据看错了这样的题不应该这么慢,一次过是很正常的,因为太简单了,这样的错误千万别犯了代码:#include #include const int N = 150;int r, c;char g[N][N];int main(){ while ( scanf(原创 2013-03-07 17:07:16 · 1313 阅读 · 0 评论 -
ZOJ 1649 Rescue (BFS)
题目大意:在一个矩阵里,有五种字符,一种是起点,一种是终点,一种代表墙不能走的,一种代表警卫需要花时间杀警卫的,最后一种代表路,每走一个格要花一个单位时间,杀一个警卫要花一个单位时间。求从起点到终点,花得最短时间!分析:最短路径,其实很简单的,bfs搜索,然后判断一下是不是墙,是不是警卫和路,分别处理;在用一个数组d来记录每个点到起点的最短路径,同时也是用来标记已经遍历过的状态。代码:原创 2013-04-03 13:07:17 · 948 阅读 · 0 评论 -
HDU 1885 Key Task(状态压缩+BFS)
这道题和UVA上面的一道题目很类似,需要钥匙的题目,那道题是开关,也差不多。不同的是,那道题不需要走到需要关灯的房间就能控制,而这个需要走到门的位置。还有就是房间的表示是不一样的,那个是一维的这个是二维。但是思想都是一样题目:矩阵,有的地方有钥匙,有的地方有门,有的是墙,有的是起点还有终点,还有路。门必须用相应的钥匙可以打开。出口有多个,这个要注意。第一次wa就是wa在这里了,因为,在原创 2013-04-03 20:37:43 · 965 阅读 · 0 评论 -
HDU 1010 Tempter of the Bone( DFS )
这道题有一个很重要的信息就是,走过的格子不能再走了,所以我觉得回溯+剪枝即可。剪枝是很必要的,因为每个格子有4个选择,那最差的情况下应该是4^49次幂吧......剪枝有几点:第一,就是计算一下最短路径,看在限制的的步数之内是否能走到第二,就是超过k步的就返回第三,如果已经找到了出口,就是退回第四,很重要的是,在一个矩阵中,从一个点到另一个点,可能走的步数的奇偶性是一样的,原创 2013-04-04 22:29:53 · 717 阅读 · 0 评论 -
HDU 1195 Open the lock( BFS)
题意比较好理解分析一下,从一个数字可以有三种操作,加1,减1,和相邻的换位置,每一个操作,对应一个步骤,问给定一个原始值和目的值,从原始到目的,的最少变换步骤是多少?注意,这里的所有数字只能从1到9分析:对于每个数,有四位数字,每个数字三种操作,具体说中间的两数字有四种操作,分别和左右换位置,所以从一个数可以走14种状态,也就是14个路到下一个数,注意这里很可能走到重复的数,所以要用一个v原创 2013-04-05 22:55:57 · 740 阅读 · 0 评论 -
UVa 10603 Fill( BFS + 判重)
隐式图搜索是最难受的题目之一,但是一般情况下,如果是隐式图搜索的话,都要记录状态,都会有一个状态的转移。比如这道题,其实状态是只有第三个杯子里面有装满水,第一和第二个杯子里面都是空,那么这个状态可以转移的话,只能有两个方向的转移。第一是想第一杯子倒水,第二是向第二个杯子倒水,那无论是那种转移,只要这个状态曾经存在过,那么这个状态能转移到的状态就已经遍历过,并且每个状态都要有一个唯一的标识,可以原创 2013-05-12 17:10:02 · 882 阅读 · 0 评论