搜索
LYoGa
这个作者很懒,什么都没留下…
展开
-
UVA331
题意:算有几种不同顺序的冒泡排序能使给出的数组从小到大排序思路:DFS,但要记住,每交换一个之后在返回是,要记得再把两个数交换回来,才能进行下一个判断#include#includeint arr[10];int num, n, t = 0;void swap(int &a, int &b){ int temp; temp = a; a = b; b = temp;}原创 2013-07-20 10:21:15 · 595 阅读 · 0 评论 -
UVA620- Cellular Structure
题意:有三种形态的细胞排列,除了这三种,其他都为细胞变异。求suo原创 2014-07-07 21:08:33 · 570 阅读 · 0 评论 -
UVA10400- Game Show Math
题意:给出p个数字,使用+,-,*,/,这四个运算符使得最后结果等于n(四个运算符的优先级相同)思路:回溯+剪枝,不剪枝的话会TLE。用一个标记数组记录在计算的结果。#include #include #include #include #include using namespace std;const int MAXN = 32000;const in原创 2014-08-01 19:43:11 · 783 阅读 · 0 评论 -
UVA1267 - Network
题意:n台及其连成一个树状网络,其中叶结点是客户端,其他结点是服务器。已经有一台服务器提供VOD服务,要求出最少在几个记得点放置服务器,使得所有客户端到服务器的距离都不超过k。思路:先将无根树状化为有根树。之后就利用贪心,找到深度最大的结点u,每次放置服务器的地方都要放在u的k级祖先,这样是最划算的。#include #include #include #includ原创 2014-08-06 10:34:07 · 867 阅读 · 0 评论 -
UVA10120 - Gift?!
题目链接题意:有n个石头,编号从1到n,礼物藏在编号为m的石头上,第i次跳2*1-1格,可以向前跳也可以向后跳,问是否能拿到礼物。思路:简单的DFS。重点是有规律,就是n>=50时,不管m为何值,都是可以抵达m石头,所以只要搜索50以下就可以了。代码:#include #include #include #include using namespa原创 2014-08-18 16:39:10 · 754 阅读 · 0 评论 -
HDU5025-Saving Tang Monk(BFS + 状态压缩)
题目链接题意:给出n*n的网格,有且只有一个K(孙悟空)和一个T(唐僧),最多有m把钥匙,最多5条蛇,每走一格的时间为1,走到蛇的格子(杀蛇时间为1)的时间为2,取钥匙要按照顺序来,问能救到唐僧,如果可以输出最短时间。思路:bfs求最小值。开四维数组作为标记,后两维分别为取到的钥匙数,以及蛇的状态。代码:#include #include #includ原创 2014-09-20 19:54:55 · 1200 阅读 · 0 评论 -
HDU5038-Grade
题目链接题意:用给出的公式求出每个格子蘑菇的数值,求出现频率最多的数值,如果存在出现频率一样的话并且还存在其他频率,输出频率最多且一样的数值,按升序,但要注意有且出现只有一种数值时,输出这种数值。思路:简单模拟代码:#include #include #include #include #include #include using names原创 2014-09-21 21:09:33 · 1169 阅读 · 0 评论 -
UVA208
题意:找出所有能到达目标地点的道路,最后输出总路线数思路:刚开始看到之后觉得不难,就是DFS,然后回溯输出路线,但写完之后,交上去,就TLS,超时,看了下别人的题解,因为有21个结点,如果不剪枝会超时,所以先将与 #include #include#define N 22 int map[N][N], vis[N], a[N], b[N];i原创 2013-07-27 19:22:54 · 687 阅读 · 0 评论 -
UVA529- Addition Chains(迭代+DFS)
题目链接题意:给一个数n,要你找出一个以n为结尾的序列,使得这个序列中的任意一个数(1除外),能由序列中的两个数(可以相同)相加得到。求最短的序列,如有多种组合,任意输出一个。思路:要迭代+DFS,首先我们可以得到要使序列尽量短的话,那么n最好是能由n/2相加得到,所以我们就可以得到最小深度depth,以depth为基础,进行深搜,如果满足的话就输出,如果不符合的话,再原创 2014-08-16 12:45:30 · 916 阅读 · 0 评论 -
UVA585- Triangles(暴力枚举)
题目链接题意:找出所给图形中,没有被染色的最大的三角形的面积。思路:仔细观察图形可以发现大三角形的形成是已一个未染色小三角形为基础,然后一层一层往上叠加(如果整层没被染色)。从上往下看图形不难发现,如果小三角形的底边朝上,叠加是向上形成的,底边朝下,叠加是向下形成的。所以我们可以枚举每一个没有被染色的小三角,更新能叠加的最大的层数,也就能得到最大三角形的面积。原创 2014-08-16 15:48:26 · 874 阅读 · 0 评论 -
UVA1374 - Power Calculus(迭代深搜+剪枝)
题目链接题意:给出x和正整数n,问最少需要几次乘除法 可以得到n = x^m思路:其实是关于指数的操作,即从1到m最少的步数。我们可以先确定最少步数m,然后进行迭代,迭代的过程也就是判断通过相加减所得到的数可以在m次操作中等于n,如果可以的话,m即为最小步数,如果不行的话,m++,进行下一次迭代。代码:#include #include #include原创 2014-08-17 19:56:17 · 1272 阅读 · 0 评论 -
UVA11127- Triple-Free Binary Strings(DFS+位运算)
题目链接题意:给出长度为n的字符串,字符串由‘1’,‘0’,‘’组成,其中‘’可以任意替换为‘1’,‘0’,求不存在连续3个相同子串的字符串的最多个数。思路:我们可以利用二进制的形式来表示字符串,进行DFS。利用位运算的左移来表示在‘*’位置上放置‘1’,注意在递归的过程中注意判断之否存在3个连续相同的子串。代码:#include #include #i原创 2014-08-18 14:58:22 · 805 阅读 · 0 评论 -
HDU5012-Dice(BFS)
题目链接题意:给你两个色子,如果可以通过旋转使两个色子的面一一对应相等(旋转规则题目给出),求最小步数,如果不行,输出-1。思路:用BFS求最少步数。代码:#include #include #include #include #include using namespace std;const int MAXN = 6;struct n原创 2014-09-14 22:38:56 · 1320 阅读 · 2 评论 -
UVA10054
#include#include#define N 100 int map[N][N], vis[N], degree[N]; int n, m, a, b, t = 0, count; void dfs(int u){ vis[u] = 1; count++; for(int i = 1;i <= 51; i++) if(!vis[i] && map[u][i])原创 2013-07-12 19:53:42 · 844 阅读 · 0 评论 -
UVA11624-Fire!(两次bfs)
题目链接题意:你的任务是帮助J走出一个大火蔓延的迷宫。J每分钟可以超上下左右四个方向移动,而所有着火的格子都会往四周蔓延。迷宫中有一些障碍,J和火都无法进入。当J走到一个迷宫的边界格子时,我们认为他已经走出了迷宫。思路:这是大白上面的一道题目,其实只要将每个格子什么时间着火处理出来就可以了。两次BFS,第一次处理格子着火的时间,第二次BFS就是判断是否能在最短时间内走出原创 2014-09-24 22:51:47 · 1573 阅读 · 0 评论 -
HDU5040- Instrusive(BFS+记忆化搜索)
题目链接原创 2014-09-23 20:49:25 · 747 阅读 · 0 评论 -
UVA10913 - Walking on a Grid
题意:一个N * N的网格,每个格子里面有数值,求从(1, 1)到(N)原创 2014-07-23 22:25:30 · 595 阅读 · 0 评论 -
UVA10245 - The Closest Pair Problem
题意:找出距离最近的两个点思路:直接暴力搜索,但要剪枝才能过,不然会超时#include #include #include #include using namespace std;struct node{ double x, y;}n[10005];int cmp(node a, node b) { return a.x < b.x;}原创 2013-12-17 20:48:49 · 589 阅读 · 0 评论 -
UVA10596
#include#include#define N 300 int map[N][N];int vis[N], degree[N]; int n, m, a, b;void dfs(int u){ vis[u] = 1; for(int i = 0;i < n; i++) if(!vis[i] && map[u][i]) { dfs(i); }原创 2013-07-12 20:05:08 · 768 阅读 · 0 评论 -
UVA532
题意:走3D迷宫,找到出口思想:BFS,六个方向一起搜#include#include#include#define N 50 using namespace std;int vis[N][N][N], Map[N][N][N];char map[N][N][N];int a, n, m, num, c1, c2, c3, d1, d2, d3, flag;int d原创 2013-07-18 21:42:14 · 552 阅读 · 0 评论 -
UVA439
题意:移动棋子到指定的位置所需要的步数最少,也就是走日字思路:DFS就是从初始位置进行搜索,每进行一次就更新一次最少步数。 BFS就是从八个方向搜索,一搜索到指定的位置就返回步数BFS的代码:#include#includeint dx[] = {-1, -1, -2, -2, 1, 1, 2, 2};int dy[] = {-2, 2,原创 2013-07-18 16:50:45 · 615 阅读 · 0 评论 -
UVA572
题意:*为空的,@为油田,找出连接在一起的油田共有多少块传统的深搜DFS#include#include#includeusing namespace std;#define N 105char map[N][N]; int vis[N][N], cnt, n, m;int dx[] = {-1, -1, -1, 0, 0, 1, 1, 1}; int dy[] =原创 2013-07-18 16:41:38 · 749 阅读 · 2 评论 -
UVA569
#include #include#include#define N 50 int vis[N][N], map[N][N];int n, m, a, b, lenmax;void dfs(int x, int y){ if(y > lenmax) lenmax = y; for(int i = 0;i < n; i++) { if(!vis[x][i] && !v原创 2013-07-12 19:57:13 · 525 阅读 · 0 评论 -
UVA10004
#include#include#include#define N 1010int map[N][N], vis[N]; bool color[N]; int n, m, i, a, b;int dfs(int x){ for(i = 0;i < n; i++) if(map[x][i]) { if(!vis[i]) { vis[i] = 1;原创 2013-07-12 20:00:59 · 557 阅读 · 0 评论 -
UVA784
#include#includechar map[35][85];int vis[35][85];int dx[] = {1, -1, 0, 0}, dy[] = {0, 0, -1, 1};int k;int w[35];void dfs(int x,int y){ vis[x][y]=1; for(int i = 0;i < 4; i++){ int nx原创 2013-07-12 20:00:26 · 514 阅读 · 0 评论 -
UVA120
#includeint a[102], b[102], c[2000], i, step, n, num = 1, max;int getmax(int a[], int n){ int temp, max = n; for(int i = 1; i < n; i++) if(a[i] > a[max]) max = i; return max;}//查询最大数的位置原创 2013-07-12 19:55:11 · 581 阅读 · 0 评论 -
HDU4500
朝四个方向搜索即可#include#include#include#include#include#includeusing namespace std;int arr[25][25], v[25][25];int dx[] = {1, -1, 0, 0};int dy[] = {0, 0, 1, -1};int n, m, Max, a, b;void bf原创 2013-08-14 21:31:17 · 729 阅读 · 0 评论 -
UVA10344
题意:给出5个数字,自由组合,用+,-,*,是否能算出23思路:全排列,然后就深搜,是否能得到23#include#include#includeusing namespace std;int arr[5];int flag;void dfs(int x, int d){ if(flag) return; if (x == 5){ if(d原创 2013-07-20 10:18:22 · 521 阅读 · 0 评论 -
UVA639
题意:找出一张地图最多能放多少个互相不能碰到的酒鬼,横纵都不能碰面思路:类似于八皇后的题目,看了一下别人的代码,自己又想了一下,就是DFS,不断更新最大值#include#include#includeusing namespace std;char map[10][10];int vis[10][10];int n;int wall(int a, int b){ fo原创 2013-07-20 10:16:16 · 515 阅读 · 0 评论 -
UVA193
题意:使相连的两点都不能为黑色,求所染的色中黑色的数目最大思路:先将所有点都染为白色,然后再进行染黑色,如果染黑色,则进行下一次递归时,要记得数目num+1,如果没有的话,就不要+1;#include#include#define N 105int color[N], black[N];int map[N][N];int Max, n, a, b, num; int原创 2013-07-27 19:15:49 · 639 阅读 · 0 评论 -
UVA165
题意:h表示可以贴的邮票的数量,k表示能用的邮票的面值的数量,求所拥有的面值能连续组合而成到最大是多少,也就是连续邮资问题。思路:DFS+回溯#include#include#include#include#includeusing namespace std;int h, k, d;int a[11], b[11], vis[200];void judge(int原创 2013-07-27 19:04:42 · 653 阅读 · 0 评论 -
UVA140
题意:在每种排列中,每个相连接的点都有最大的带宽,再比较各个点的带宽,取最大的那个带宽,但题目是要让我们找出在所有排列中取出的那个带宽最小。思路:DFS+回溯,但要记住如果出现带宽相等时,要取那个字典序小的输出,这题的输入处理数据有些麻烦。。。。。。#include#include#includechar s[10], str[10];int vis[26], map[26][2原创 2013-07-27 19:27:02 · 848 阅读 · 0 评论 -
UVA167
题意:求所放的皇后的位置的和最大思路;八皇后问题,从第一行开始放皇后,看要放在哪一列,之后递归,回溯,判断与之前所放的皇后是否冲突,如果冲突则不进行这次搜索,跳到下一次#include #include int arr[8][8], c[8]; int sum;void search(int cur, int d){ if (cur == 8){ if (d > sum)原创 2013-07-27 19:10:44 · 1345 阅读 · 0 评论 -
UVA10129
#include#include#define N 100int map[N][N], in[N], out[N], vis[N]; int n, m;void dfs(int u){ vis[u] = 1; for(int i = 0;i < N; i++) if(!vis[i] && map[u][i]) dfs(i);}//深搜,将点连通int main原创 2013-07-12 19:50:36 · 711 阅读 · 0 评论 -
UVA10047- The Monocycle(BFS)
题目链接题意:一自行车的轮子被分成5个扇区,涂了5种不同颜色。自行车每1秒要么骑到下一个格子,要么左转或者右转90。。一开始自行车面向北,颜色为绿,到达目标格时,必须触底颜色为绿,但朝向无限制。求到达目标格的最短时间。思路:判重数组多加两维,分别为朝向和颜色,之后就可以用BFS求最少时间了。代码:#include #include #include #原创 2014-09-25 10:11:17 · 1191 阅读 · 0 评论