搜索
youthinkwu
这个作者很懒,什么都没留下…
展开
-
ZOJ 1047 Image Perimeters
大意:给出一张有“.”和“X”组成的图,给出点击位置s,t。求由s,t以及附近不包含”.”的由”X”组成的联通图的周长。 做法:很容易发现,当一个“X”上下左右四个位置没有“X”的时候就会有边,因此,我们BFS搜索由S,T出发能到达的所有是“X”的点,每个“X”的上下左右四个位置有几个“.”就有几条边。搜索完即可。#include <iostream>#include <cstring>#in原创 2015-02-17 11:26:22 · 246 阅读 · 0 评论 -
ZOJ 1940 Dungeon Master
这题是3维的搜索题。用BFS就可以。只能上下左右前后六个方位,所以方向数组就是dir[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}}; 要注意有可能到不了的情况。#include<cstdio>#include<cstring>#include<queue>using namespace std;int l,r,c,x1原创 2015-02-14 22:04:18 · 363 阅读 · 0 评论 -
HDU 4158 GO
围棋,虽然不怎么懂围棋规则,这题题目说明:只有同色棋子围着的区域的空点属于该色旗子,哪方围的空点多哪方就胜利,问哪方胜利。 思路:BFS空位,搜到空位加入队列,然后统计空位的个数+1,搜到棋子标记该种颜色棋子出现,但不加入队列,搜完一个区域后,看是否两种棋子都出现,如果是,该区域就不属于任何一方,如果不是,把该区域的空位数+到相应方。搜索知道所有的空位都遍历过为止。#include <iostre原创 2015-02-14 22:17:46 · 376 阅读 · 0 评论 -
POJ 3126 Prime Path
这题是给出两个素数,每次让你改变素数的一个数字使得改变后还是素数,问最少改变几次可以从原素数变成指定的素数。 思路:BFS,给定的素数的4位的,我们可以暴力枚举每一位。然后用一个数组记录出现过的素数,防止重复遍历,无法结束。#include <iostream>#include<cstdio>#include<cstring>#include<queue>using namespace s原创 2015-02-14 22:30:04 · 233 阅读 · 0 评论 -
HDU 1312 red and black
这题就是给你一个图,“@”代表人的位置,“#”代表不能走的地方,“.”代表能走的地方。能走的地方是联通的,让你统计一共有几个”.”。 裸搜索题,BFS或者DFS都行。提供两个版本。 BFS版#include<cstdio>#include<cstring>#include<queue>using namespace std;int n,m,ans,ma[22][22],dir[4][2]原创 2015-02-14 21:48:44 · 302 阅读 · 0 评论 -
HDU 1181 变形课
大意:给出一些单词,然后一个单词的结尾和一个单词的开头如果是相同的字母,他们就可以相互到达,问是否存在b开头到达m结尾的情况。 做法:string+BFS#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <string>using namespace std;string s[3原创 2015-02-17 12:13:37 · 194 阅读 · 0 评论 -
HDU 1518 Square
大意:给出N跟木棍,问是否能用这些木棍拼出一个正方形。 做法:DFS,DFS前,先判断总长度sum是否整除4,不整除直接NO。整除进行DFS判断。边长为sum/4.#include <iostream>#include <cstdio>#include <cstring>using namespace std;int a[22],flag[22],sum,t;bool DFS(int l原创 2015-02-17 10:53:22 · 220 阅读 · 0 评论 -
UVA 10004 Bicoloring
题意:给出一张强联通无向无点环图,问是否能用2种颜色把所有的点涂上颜色,使得相邻的点颜色不相同。就是双色问题。 解法:BFS就可以,一边搜一边给点上色,遇到相邻的点。如果没上色,则给它上不同的颜色,如果有颜色了,判断跟现在的点颜色是否一样,一样则不能满足题意。#include <iostream>#include <cstring>#include <cstdio>#include <alg原创 2015-02-21 17:11:39 · 199 阅读 · 0 评论 -
HDU 1455 Sticks
大意:给出T根棍子,让你把他们拼成几根相同长度的棍子,问棍子数最多的时候长度是多少(棍子长度最短的时候长度是多少)。 这题跟HDU1518的做法差不多。那题是固定只有4边,这题只不过变成根数是改变的而已。依旧DFS解决。#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>using namesp原创 2015-02-17 11:50:35 · 272 阅读 · 0 评论 -
HUST 1017 Exact cover
题目大意:给出一个01矩阵,让你选出几行,使得所有的列有且只有1个1。输出选出的行的行数和行号。 解法:这是一种精确覆盖模型。用dancinglink,看了很多博客,看吐了终于理解了。不得不说dancinglink很神奇,不过写起来太麻烦。搞一个模版以后用就好了。#include <iostream>#include <cstdio>#include <cstring>#include <a原创 2015-02-17 16:42:42 · 233 阅读 · 0 评论 -
POJ 1383 Labyrinth
这题是求图里的最长路。DFS可以做,需要DFS两次,第一次是要求出起点,保存遍历到的距离最远的点的坐标做为第二次DFS的起点。因为这个图有可能不联通,所以求起点需要多次DFS完所有的空位。求出起点后再一次DFS就可以求出最长路了。#include <iostream>#include <queue>#include <cstdio>#include <cstring>#include <al原创 2015-02-17 11:06:13 · 224 阅读 · 0 评论 -
HDU 1372 Knight Moves
这题也是搜索题,了解了骑士(knight)的走法之后就容易了。骑士走日字形。然后一共八种走法。于是,方向数组就是 dir[8][2]={{2,1},{2,-1},{1,2},{-1,2},{-2,1},{-1,-2},{-2,-1},{1,-2}}; 处理abcdefg的小技巧,-‘a’转换成数字。这样就可以很方便的存到二维数组里了。BFS就可以找到最短路。#include<cstdio>#i原创 2015-02-14 21:58:36 · 278 阅读 · 0 评论