DFS BFS
programmy
本人擅长Ai、Fw、Fl、Br、Ae、Pr、Id、PS等软件的安装与卸载,精通CSS、JavaScript、PHP、C、C++、C#、java、Ruby、Perl、Lisp、python、Objective-C、ActionScript等单词的拼写,熟悉windows、Linux、Mac、Android、IOS等系统的开关机。欢迎各大公司HR与本人联系。
展开
-
POJ 3083 Children of the Candy Corn(DFS+BFS)
poj 3083题目大意 #……# #.####.# #.####.# #.####.# #.####.# #…#..# #S#E####求出从起点S到终点E的沿着左边墙(#)、右边墙、和最短距离。分析 最短距离就是裸的BFS,沿左边墙和右边差不多,用DFS。用一个face变量来表示当前的面朝方向,关键是在某个位置是需要不断转向来判断面朝的方原创 2016-08-15 14:36:32 · 321 阅读 · 0 评论 -
POJ 2049 Finding Nemo(广搜+优先队列)
poj 2049题目大意 从(0,0)出发,给定终点,黑色边是墙,白色是门,问最少穿过多少门能到达终点。分析 一开始就把这道题当作一道普通的格子BFS问题在写,写着写着才发现要求穿过的门的最少数。实际上无论是求最小的步数还是最少穿过的门数,方法都是一样的。但这道题不能用普通队列,而应该用优先队列,其实普通队列就是优先队列的一个特殊情况,最小步数问题在入队的过程中就保证了按步数从小到大排列原创 2016-08-15 11:58:29 · 439 阅读 · 0 评论 -
POJ 3278 Catch That Cow(简单BFS)
poj 3278题目大意 给定一个区间(0~100000),给两个数N,K作为从N到K的起点和终点。每次操作可以+1、-1、*2。问最少多少次操作可以到终点。分析 把每个数字看成一个状态,一共就10510^5个状态,直接广搜就行了。代码#include<cstdio>#include<iostream>#include<cmath>#include<cstring>#includ原创 2016-08-14 15:41:34 · 507 阅读 · 0 评论 -
POJ 2531(搜索剪枝)
题目链接poj2531题目大意 一个有n个节点的图(n≤20n\le 20),节点间距C给定,让你把这个图分为A、B两类节点使得∑Cij,(i∈A,j∈B)\sum C_{ij},(i\in A,j\in B)最大,问这个最大值是多少。分析由于n很小只有20,可以直接枚举,复杂度是220∗2022^{20}*20^2超时。需要剪枝。这道题的剪枝技巧是: 采用深度优先搜索的方法,对每一个节点原创 2016-12-02 16:10:26 · 569 阅读 · 0 评论 -
POJ 2676(数独求解器 搜索)
题目链接poj2676题目大意 给你一个9*9的数独让你找出一种可行解分析题目不难,有点类似于八皇后的做法,放上一个数后,用x、y、z数组标记上x[i][k]表示第i列是否能放k(0表示能)y[i][k]表示第i行是否能放kz[i][k]表示第i个3*3的格子是否能放k 格子标号为0~8之前一直习惯下标从1开始好理解,但做了这道题之后发现从0开始也是有好处的,从一行的最后一个格子跳到下原创 2016-12-02 19:43:56 · 396 阅读 · 0 评论 -
POJ 1129 Channel Allocation(搜索)
题目大意 给定一个图(V,E),V≤26(V,E),V\le 26,节点表示广播站,现在让你给每个广播站分配一个频道(用一个数字表示),使得相邻的广播站的频道数不同。问最少用多少种频道能满足要求。分析由于V比较小,考虑枚举,但直接枚举262626^{26}肯定超时,所以需要剪枝,把已经确定频道了的节点相邻的节点用一个数组来表示它不能在选择这个频道。 这种搜索写多了感觉套路都差不多了。代码#i原创 2016-12-02 22:47:43 · 346 阅读 · 0 评论 -
POJ 2251(基础三维BFS)
poj2251题目大意 在一个三维格子里面, 有两种格子,一种可以走一种不能。给定一个起点和终点问从起点最少走多少步可以到达终点。分析很基础的一道bfs,在这里记录一下以后处理类似的问题一个技巧:通过xx[]、yy[]、zz[]数组实现一个人循环将一个节点周围的元素入队。代码#include<cstdio>#include<iostream>#include<cmath>#include原创 2016-11-24 09:01:27 · 460 阅读 · 0 评论 -
POJ 3352 Road Construction(边双连通)
POJ 3352题目大意一个有 N 个景点的岛,任意两个景点都有道路相连,当道路施工时,游客便不能在该道路上通行,问至少再增加几条道路可以使得在任一条道路维修的情况下,游客都能从岛上任意一个景点到达另一个景点。分析重述一下问题也就是问“至少增加几条边能使一个无向图变成边双连通”如果将各个边双连通分量都缩成一个点,那么整个图就变成了一颗树要使得一棵树变为一个双连通图,有一个定理: 增加的边数 =原创 2017-02-27 13:33:08 · 380 阅读 · 0 评论 -
HDU 1814(染色)
题目大意 有n个党派,每个党派2个人,这2*n个人之间存在一些敌对关系,现在要从中选出n个人组成一个委员会,要求满足: 1.每个党派中选1个 2.委员会中不存在敌对关系分析题目中第i个党派的成员编号是2n-1与2n,我们将编号减去1就可以通过x^1来得到和x在相同党派的另一个人了。如果a与b敌对,那么a一定与b^1相同颜色。 用染色法来解决这个问题,设1为选中的颜色,2为不选原创 2017-08-05 10:57:39 · 329 阅读 · 0 评论