
数据结构--搜索
文章平均质量分 86
无心流泪
这个作者很懒,什么都没留下…
展开
-
无权最短路径的求法--图的广度优先搜索
http://blog.youkuaiyun.com/midgard/article/details/4141087图的搜索技术是图算法领域的核心。许多图算法的开始,都是通过搜索输入的图来获取图结构信息,另外还有些图的算法实际上是通过图搜索算法经过简单扩展而成的。广度优先搜索的执行方法:从任意点s出发,先遍历与s相邻的点,然后再遍历于相邻的点相邻的点。注意有向图必须是顺方向的邻接点。详细方法,转载 2013-03-10 20:07:36 · 1282 阅读 · 0 评论 -
uestc oj 1490 Eight Puzzle
Eight Puzzle 做了此题,更加深深感觉到了咱们oj数据的强大威力,在其他oj绝对能过的到了这里TLE(其实发生过很多回了) 此题运用广度优先搜索+hash(康托展开) 此题的常规做法是开一个9*9*9*9*9*9*9*9*9 的数组用于存储状态 但是这是极大的浪费事实上也是不可能的 超内存的 因此就要用到hash来进行处理,运用康拓展开来实现的原理原创 2013-06-10 18:50:11 · 1091 阅读 · 0 评论 -
uestc oj 1668 分数拆分
分数拆分 这一题运用了迭代加深的深度优先搜索 因为分数拆分如果不进行限制的话会出现无穷多的深度,又因为题目要求用最少的分数因此可以从小到大加深搜索 在每次搜索时会限定一个深度deep,深度达到deep之后判断分数是否拆分完毕 要建立两个数组,一个是临时数组temp用于存储单次DFS得到的解,ans存储最优解,每次发现此深度值下的解之后与 最优解进行比较看是否得到了更忧的原创 2013-06-11 00:57:37 · 1058 阅读 · 0 评论 -
uestc oj 1272 Sticks
Sticks 这一题仍然要采用深度优先搜索+剪枝 这一题的剪枝很重要。 首先题意是要求木棒的最短长度,首先明确一点木棒的长度一定在最长木棒长度---所有木棒长度总和之间 所以在读入木棒长度之后要找出最长的和长度总和两个值。 还有一个理论上分析得出的结果 就是长木棒的灵活性较小在拼接的时候要首先拼接长木棒再考虑短木棒 比如要拼接一个长度为8的木棒 拼接 5原创 2013-06-11 00:53:21 · 931 阅读 · 0 评论 -
poj 2362 Square
http://blog.youkuaiyun.com/wangjian8006/article/details/8828332题目大意:给出n条木棍的长度,将这些木棍头尾相接,问能不能组成一个正方形,如果可以,那么输出yes,否则输出no解题思路:搜索,加一些剪枝,搜索大致这样描述,将木棍从小到大排序,之后取木棍,如果可以组成一条边,那么再从开始取木棍组边。直到取到4条边为止 #inclu原创 2013-07-12 01:25:12 · 919 阅读 · 0 评论 -
HDOJ 1175 连连看 广度优先搜索
http://www.cppblog.com/mythit/archive/2009/04/29/81497.html?opt=adminProblem Description“连连看”相信很多人都玩过。没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子。如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子),而且线的转折次数不超过两次,那么这两个棋子转载 2013-12-09 19:08:39 · 1982 阅读 · 0 评论 -
BFS宽度优先搜索思想
http://blog.chinaunix.net/uid-26602509-id-3179280.html1、宽度优先基本思想 宽度优先搜索算法(又称广度优先搜索算法)是最简单的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijksta单源最短路径算法和Prim最小生成树算法都采用了与宽度优先搜索类似的思想。 宽度优先搜索的核心思想是:从初始结转载 2013-12-10 18:13:47 · 1606 阅读 · 0 评论 -
2013华为杯编程大赛成都第三组试题--------C 连连看-判断两个图案是否可以消去
题目 C: 连连看-判断两个图案是否可以消去时间限制: 10 Sec 内存限制: 128 MB提交: 23 解决: 3[提交][状态][讨论版]题目描述连连看,你不会?那就out了!给定一个连连看棋盘,棋盘上每个点有各种图案(用非0数字表示),输入棋盘上的任意两个坐标,判断这两个坐标对应的图案是否可以消除,消除的条件是图案相同且图案间连线的转角数不得超过2 。1原创 2013-12-10 16:52:35 · 2955 阅读 · 1 评论 -
Pick numbers
DescriptionGiven a matrix of size M*N, the elements of which are integer numbers from -10 to 10. You task is to go from the top-left corner (1, 1) to the bottom-right corner (M, N). You can only mov原创 2014-04-04 00:01:34 · 941 阅读 · 0 评论 -
uestc oj 1484 STAMPS
首先说明下:咱们oj上的数据就是给力,完败poj在poj上我明明写错了还是能过,显然数据太水,还是咱们oj好。 本题利用深度优先搜索完成 在搜索到每一个数据时分五个方向向下递归神搜分别是0,1,2,3,4 五个方向 同样设置一个temp 一个ans 找到忧解之后与假定最优解进行比较最后确定最优解 在邮票张数大于4或者说在搜素的种类数已经超过总数时retur原创 2013-06-10 17:03:41 · 1101 阅读 · 0 评论 -
uestc oj 1276 Chiara’s “Beiju”
Chiara’s “Beiju” 这一题采用广度优先搜索解题,由于杯子没有顺序,只需要关注的是向上杯子的数量,那么的话也就一共10000种情况,直接广度搜索就行了。向上的杯子记为1,在每一次翻转杯子之前,要注意求出可以翻转杯子的种数,要满足三个条件 1,向上翻转不能超过现在可以向上杯子的数量 2. 向下翻转的不能超过可以向下翻转的杯子的数量 3。翻转之后的情况不能在广原创 2013-06-10 17:00:53 · 828 阅读 · 0 评论 -
uestc oj 1269 Children of the Candy Corn
Children of the Candy Corn 这个题目的纠结之处在于题意的理解还有就是代码的书写能力上。 就是两个深度搜索,一个广度搜索 深度搜索一个是沿着左手侧的一个是沿着右手侧的 这两个处理起来较为麻烦,广搜简单。 处理的时候遵循方向原则 沿着左手走的时候,先向左走,不行的话就向前走,然后向右走 再不行就往回走原创 2013-06-10 16:58:37 · 788 阅读 · 0 评论 -
数据结构——图的邻接矩阵的深度优先搜索
在ACM算法里面题目大都会采用邻接矩阵方式存储。#include #includeusing namespace std;#define MAX_VERTEX_NUM 10 //最大顶点个数typedef char VERTYPE;typedef struct{ VERTYPE vexs[MAX_VERTEX_NUM];原创 2013-03-10 19:20:00 · 1108 阅读 · 0 评论 -
Prime Path poj 3126
Prime PathTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 8479 Accepted: 4831DescriptionThe ministers of the cabinet were quite upset by the message from the Chief of Security stating原创 2013-03-22 21:38:17 · 1410 阅读 · 0 评论 -
uestc oj 1796 Flash Mob
这个题目大概意图就是给定一些点的坐标,寻找到一个点到其他所有点的距离是最小的,路径只能是横或者是竖的,题目的关键在于想到最经的点必然是是在所有点的中间,则可以有两种思路解决这个问题,一种十分偷懒的方式就是寻找所有点x坐标和的从大到#include #include #include #define LL long long using namespace std; co原创 2013-03-24 00:20:03 · 896 阅读 · 0 评论 -
hdoj 1253 胜利大逃亡 多种解法的比较
#include#include#include#include#includeusing namespace std;const int N = 55;const int dir[6][3] = {{0, 0, 1}, {0, 0, -1}, {-1, 0, 0}, {1, 0, 0}, {0, 1, 0}, {0, -1, 0}};struct node{ int x,原创 2013-04-12 12:51:18 · 1062 阅读 · 0 评论 -
uestc oj 1795 Babs' Box Boutique
题目大体意思是给你一些盒子的长宽高,把它们摞起来,怎样摆放每个盒子任意,但总要保证下面的比上面的大, 实际问题转变成问题模型有点困难的,利用深度优先搜索,对每种情况进行遍历,找到能摞起来盒子数最多的情况。标准是自上而下的搜索,要求是a,b,c从小到大排好序之后先从小的组合开始a,b;不行的话再a,c;;再不行就最大的组合b,c;因为要求数量最左,所以尽量小就行了。这其实也是一种剪枝的,如果直接混乱原创 2013-03-23 23:04:03 · 1267 阅读 · 0 评论 -
uestc oj 1670 积木
积木 本题采用深度优先搜索+剪枝可以完成。 由于本题只有20层的数据量不是很大,可以选用DFS遍历所有满足条件(下面的圆柱体的底面半径和高度都必须比上面的大)的组合,分别并分别求出面积进行比较就行了,最后求出涂色面积最小的量。 void dfs(int m_left, int n_left,int r_last,int h_last,int now_s) 分别原创 2013-06-10 16:57:13 · 1088 阅读 · 0 评论 -
uestc oj 1488 Flip Game
Flip Game 这个题目数据量只有4*4 所以进行深度优先搜索完成所有情况的遍历,求出最短步数就可以了。 这个题目有一个需要注意的地方就是在读入数据的时候要用getchar()进行读取回车。这个操作在读取字符的时候一定是要注意的。 在读取整形变量的时候是不需要的。 建立一个int map[6][6];型的整形数组,在读入字符的时候是黑丝b就初始化为1,是白色就初始化为0 每原创 2013-06-10 16:57:35 · 1017 阅读 · 0 评论 -
uestc oj 1002 解救小Q
解救小QDescription小Q被邪恶的大魔王困在了迷宫里,love8909决定去解救她。迷宫里面有一些陷阱,一旦走到陷阱里,就会被困身亡:(,迷宫里还有一些古老的传送阵,一旦走到传送阵上,会强制被传送到传送阵的另一头。现在请你帮助love8909算一算,他至少需要走多少步才能解救到小Q?Input第一行为一个整数T,表示测试数据组数。每组测试数据第一行为两个整数...原创 2013-06-10 16:58:14 · 1295 阅读 · 0 评论 -
usetc oj --Android key
题目大致意思就是使用android锁,给定长宽,然后给定一个长度,算出来一共有多少个选择(方向不同算不同的选项)输入样例2 2 33 3 2输出样例824#include #include int m,n,k,a[10][10],allways;void dfs(int i,int j,int way) { if(way==k)原创 2014-03-25 01:06:31 · 980 阅读 · 0 评论