随笔分类 -  DFS

Best Sequence
摘要:poj1699:http://poj.org/problem?id=1699题意:给你nge串,让你求出这些串组成的最小的串重叠部分只算一次。题解:我的做法是DFS,因为数据范围只有10,就算是n!也只有300多万,加上剪枝,就可以过了。 1 #include 2 #include 3 #inclu... 阅读全文

posted @ 2014-09-19 18:25 天依蓝 阅读(168) 评论(0) 推荐(0)

Left Mouse Button
摘要:FZU:http://acm.fzu.edu.cn/problem.php?pid=1920题意:叫你玩扫雷游戏,已经告诉你地雷的位置了,问你最少点几次鼠标左键可以赢这盘扫雷题解:直接DFS,(注意这里是8个方向搜索不是4个方向),然后把0周围的不是雷的格子置0,然后统计不是0也不是雷的格子数量,然... 阅读全文

posted @ 2014-05-19 21:11 天依蓝 阅读(538) 评论(0) 推荐(0)

The Wedding Juicer
摘要:poj2227:http://poj.org/problem?id=2227题意:给你一块矩形区域,这个矩形区域是由一个个方格拼起来的,并且每个方格有一个高度。现在给这个方格灌水,问最多能装多少水。例如555525555这个区域,只有中间的一个方格能装水,因为只有中间的高度比周围都低,所以能装3单位的水。题解:一开始自己也不不知道怎么做,看了黑书p89的介绍才知道怎么做。是这样的,从边界周围的最低处入手,DFS,如果周围的方格比这个高度高,则把这个方格加入最小堆中,如果比这个小,则继续DFS。同时要注意边界的处理。这样一来,每次DFS,都能确定新的边界,并且每次都是从已知边界的最小处进行DFS 阅读全文

posted @ 2014-01-30 09:55 天依蓝 阅读(356) 评论(0) 推荐(0)

Network Saboteur
摘要:poj2531:http://poj.org/problem?id=2531题意:给你一个图,图中点之间会有边权,现在问题是把图分成两部分,使得两部分之间边权之和最大。题解:一开始比知道怎么办,想用搜索,但是20的范围,觉得范围有点大,所以没敢打,最后还是试了试结果竟然过了。#include#include#include#includeusing namespace std;int a[24],b[24];//记录图中的两部分int num1,num2;int counts,minn;int vis[24];int n;int g[24][24];void DFS(int x){//对于一个 阅读全文

posted @ 2014-01-25 10:28 天依蓝 阅读(447) 评论(0) 推荐(0)

A Knight's Journey
摘要:poj2488:http://poj.org/problem?id=2488题意:给你一张地图,然后有一个骑士,骑士可以从地图的任意一个方格开始,作为起点,问你该骑士能否走遍整张题图。题解:首先想到就是DFS,但是要对每个点进行一次DFS,时间复杂度估计hold不住,后来一想,有些点,不必搜索。因为已经收过,所以可以采取记忆化搜索。但是这一题的难点不是这里,在于所谓的字典序输出,一开始不知道这里的字典序是指什么。后来才知道,就是找字母小的,字母相同就找数字小的,这样一来搜索到额顺序就确定了。#include#include#include#include#includeusing namesp 阅读全文

posted @ 2014-01-22 22:05 天依蓝 阅读(621) 评论(0) 推荐(0)

Children of the Candy Corn
摘要:poj3083:http://poj.org/problem?id=3083题意:给你一个迷宫,然后给你一个起点和终点,现在给你种规则,一种是先向左,无法向左则向前,无法向前则向右,否则则向后,另外一种就是求最短路程,然后一种就先向右,向前,向左,向后,分别求出这三种情况下所走的路程。题解:求最短的路程只需BFS即可,先向左可以DFS,每次DFS记录来自的方向,对于不同的方向,采取不同的搜索顺序,即可。向右的同理。#include#include#include#include#includeusing namespace std;char map1[42][42];int counts[42 阅读全文

posted @ 2014-01-22 21:42 天依蓝 阅读(225) 评论(0) 推荐(0)

Oil Deposits
摘要:hdu1241:http://acm.hdu.edu.cn/showproblem.php?pid=1241题意:就是找出有多少块有石油的区域,就是数组中的@,这边相邻指的是是周围的八个位置。题解: dfs,从一块油田的位子开始,朝着与他相邻的8个方向收索,遇到油田就把它变成不是油田,并往下继续。遍历一下,就知道有多少了 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 char map[102][102]; 7 int m,n; 8 void dfs(int i,int j){ 9 if(im|... 阅读全文

posted @ 2013-10-13 11:51 天依蓝 阅读(164) 评论(0) 推荐(0)

Tempter of the Bone
摘要:hdu1010:http://acm.hdu.edu.cn/showproblem.php?pid=1010题意: 输入一个n*m的迷宫,和一个T:可以在迷宫中生存的最大时间。S为起点,D为终点。并且,每个格子只能踩一次,且只能维持一秒,然后该块地板就会塌陷。所以你必须每秒走一步,且到D点时,所用时间为T。用深搜。解题思路: 用深收,但是直接用深收会超时的,必须加上剪枝这里要用奇偶剪枝的方式,减少收索次数。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 char map[8][8]; //记录原来的地图 阅读全文

posted @ 2013-10-13 11:49 天依蓝 阅读(177) 评论(0) 推荐(0)

Gnome Tetravex
摘要:zoj1008:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1008题目意思是有一个游戏,即给出一个图,该图是由n*n个小正方形组成,每个小正方形又由4个三角形组成,要求用这n*n个小正方形拼成一个图,该图的每个小正方形的相邻的三角形的中间的数是相同的题解:dfs从左到右边,从上到下,一个一个放,并且进行判断,是否合理,如果合理就放置,反之则回溯。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int map[26][4]; 阅读全文

posted @ 2013-10-13 11:47 天依蓝 阅读(299) 评论(0) 推荐(0)

导航