
搜索-暴力
flowser
you are what you want to be
展开
-
poj3278-bfs
题意大概是给你两个数N,K,让你一次次通过三种方式:N+1,N-1,N*2中的一种使得最终N==K,求出N到K的最小次数。用vis数组判断是否被访问过,cnt数组保存步数。#include #include using namespace std;int a, b;queue int> q;int vis[100003], cnt[100003];void init原创 2015-12-13 17:11:24 · 321 阅读 · 0 评论 -
uva10400 - Game Show Math(回溯+剪枝)
题意: 给你一组数据及数target,让你按序用这组数据及加减乘除使得结果为target,有则输出序列,无则输出“NO EXPRESSION” Sample Input 3 3 5 7 4 3 2 1 1 2000 5 12 2 5 1 2 4 Sample Output 5+7/4=3 NO EXPRESSION 12-2/5*1*2=4 思路: 直接回溯,TLE了,马上想原创 2016-03-05 12:31:49 · 234 阅读 · 0 评论 -
uva10245 - - The Closest Pair Problem(最近点问题)
题意: 一个二维坐标,给你一些点,求距离最近的两点 思路: 直接暴力的话会超时,要加上剪枝,剪枝方法:按横坐标排序后,枚举第一个点及第二个点,若其横坐标之差已经大于当前最大距离的话,直接换下一个第一点。(T_T 没想到,思路是参考他人的) 这题还可以用分治的方法,分成左右两边各求最近点距离得到d,处理中间部分的话则在在[x-d,x+d]的点中找对,不断更新,求得最小距离。 代码如下:#in原创 2016-03-09 21:27:51 · 380 阅读 · 0 评论 -
uva167 -The Sultan's Successors(类八皇后)
题意: 和八皇后类似,要求在不互相攻击的情况下所和达到最大 思路: 做法同八皇后,保留最大值即可。 代码如下:#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;int chess[10][10],c[10];int maxsum;void sea原创 2016-02-26 14:54:02 · 440 阅读 · 0 评论 -
uva140 - Bandwidth
题意: 给你一个图(V,E),让你求一个序列,使得这个图中所有节点和与其相连节点的最大距离最小。 思路: 题目中的序列的排布组合方式用next_permutation可全部给出,所以在这些情况中找出符合题目要求的即可。 代码如下:#include <iostream>#include <cstdio>#include <cstring> #include <algorithm>usi原创 2016-02-26 15:01:52 · 300 阅读 · 0 评论 -
uva169 - Graph Coloring (回溯)
题意: 给你一个图,让你然后染成黑色和白色,尽可能多的节点染成黑色,但相邻节点不能都是黑色。 思路: node[i]=1即将i节点染成黑色,为0则表示为白色,默认所有节点为白色,总共就黑白两种情况 ,Judge可以了就黑色,然后白色。回溯。 代码如下:#include <iostream>#include <cstdio>#include <cstring>#include <algo原创 2016-02-26 15:09:54 · 356 阅读 · 0 评论 -
uva208 -Firetruck (双向搜索进行剪枝)
题意: 给你一个图,1为起始节点,END为终止节点,让你打印起始到终点的所有路径。 思路: 深搜+回溯,超时了,看到一种解释是这样的,不是所有的路都能到达终点,比如从南京到北京,地图上各种路,东西南北乱走一通是不行的。 解决方法即剪枝,从终点搜索确定出可到达终点的路线。 代码如下:#include <iostream>#include <cstdio>#include <cstring原创 2016-02-26 15:23:12 · 399 阅读 · 0 评论 -
uva10132 - File Fragmentation
题意: 一个字符串,有一堆副本,碎成两段,要你找原字符串。 (副本最后是原字符串的一部分) 思路: 代码写得有点乱,首先字符串碎成两段,我们要找到这两段拼起来再验证副本们是否能全部成为它的子串,找这两段的话应该找最长+最短的那个串。把最长串们放在large数组,最短串们放在small数组,然后枚举,直到验证成功。 代码:#include <iostream>#include <cstdi原创 2016-02-26 22:23:30 · 287 阅读 · 0 评论 -
uva270 - Lining Up(几何 - 最大共线点)
题意: 给你一堆二维点,求最大共线点数 思路: 暴力,先枚举前两个点,第三个点则采用三点共线公式: (x2-x1)/(y2-y1)=(x3-x2)/(y3-y2) ->(x2-x1)(y3-y2) = (x3-x2)(y2-y1)代码:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>原创 2016-02-26 22:28:34 · 364 阅读 · 0 评论 -
uva1382- Distant Galaxy (枚举)
题意:一个平面,n个点,找一个矩形(和x,y坐标平行),使矩形边界上的点更多。思路:枚举矩形的上下边界,再由其它条件求得左右边。left【i】表示竖线i左边的上下边界有多少点,on【i】表示竖线i不包括上下边界含有多少个点,on2【i】则表示竖线i包括上下边界含有多少点。若i表示左边界竖线,j表示右边界竖线,总数则为:left【j】+on2【j】+on【i】-left【i】.原创 2016-02-02 16:10:57 · 327 阅读 · 0 评论 -
uva11520 - Fill the Square
题意:给一个n*n的矩阵,含小数点及A-Z的字母,让你使用A-Z的字母填充小数点使得矩阵每个位置的字母与它的上下左右的字母都不相等,且字典序最小,输出填充后的矩阵。思路:枚举26个字母A-Z,依次判断是否可以填入矩阵的位置,保证了字典序的最小代码:#include #include #include using namespace std;int n原创 2016-02-02 13:55:40 · 463 阅读 · 0 评论 -
HDU2553 - n皇后(回溯法)
题目 :在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。 你的任务是,对于给定的N,求出有多少种合法的放置方法。小白里的一道题,回溯法,之前没有将数据打成表,超时了,后来百度到大神打表的做法,代码如pre() {...}N个皇后,恰号N行,每行放一个皇后,queue[i]=j即表示第i+1行的皇后正处原创 2015-12-13 15:20:49 · 934 阅读 · 0 评论 -
poj3126 - bfs
题目主要意思是,给你两个4位数的质数A,B,要将A逐步换成B,每次只能换个十百千位中的其中一位,且换后的数也必须是质数,问你,至少要换多少步,才能把A换成B例:1033换到8179 1033 >1733 >3733 >3739 >3779 >8779 >8179输出 6用数组P来判断数A是否是质数,数x是质数则P[x]为0,不是质数则P[x]为1。用visit判断该数是否原创 2015-12-13 16:16:14 · 258 阅读 · 0 评论 -
Poj3984- dfs -迷宫问题
迷宫,然后求最短路径,此题只能向下或向右走,从左上角走到右下角。用visit判断每个格子是否已经访问过了,如果没访问过,则为0,若访问过,就将其置为1,我们每次都按向下,向右的顺序去探寻下一个格子是否能走,如果下个格子没被访问过,就把它放入栈里,看它能不能向下向右继续走,如果能走就继续探索,都不能走就将其从栈中弹出,折回探索前的格子(即弹出后栈顶的格子)继续探索。代码如下:#inc原创 2015-12-13 15:56:30 · 1029 阅读 · 0 评论 -
uva729(简单题) - 全排列
@、@我就不信下次还会因为if(t)WA #include #include #include using namespace std;int main() { int t; int str[25]; cin >> t; while (t--) { int n, h; cin >> n >> h; int i; for (i = 0; i n; i+原创 2015-12-13 15:14:30 · 285 阅读 · 0 评论 -
uva10098(简单题)-全排列
#include #include #include using namespace std;int main() { int n; cin >> n; char str[100]; while (n--) { memset(str,0,sizeof(str)); cin >> str; int len = strlen(str); sort(str,str+len原创 2015-12-13 15:10:22 · 330 阅读 · 0 评论 -
uva146(简单题)-全排列
next_permutation(,)只能说这个函数尊的很好用,必备#include #include #include using namespace std;int main() { char str[100]; while (cin >> str&&str[0]!='#') { int len = strlen(str); if (next_permutation(原创 2015-12-13 15:01:53 · 414 阅读 · 0 评论 -
uva11205 -(简单题) 生成子集问题
题目大概意思就是:给你P个灯管,组成一个显示器,然后输入N个符号,问你最少用多少个灯管可以表示这N个符号,一开始题目都看不懂,并不懂怎么做,后来去看了生成子集问题,代码的关键几个地方:(1)用arr数组来存放灯管,arr[P],其中每个位都有且仅有两种可能性,1,0,表示有无该灯管void subset(int arr[], int cur) {if (cur == P) { ..原创 2015-12-13 14:41:39 · 346 阅读 · 0 评论 -
uva10167 (简单题)
切蛋糕,大概就是输入N,表示有2N个樱桃,然后下面2N行为这2N个樱桃的坐标,然后你要把蛋糕切成两份,保证这两份拥有同等数量的樱桃。下面是代码,枚举横纵坐标,题目给定的范围是-500~500,后来发现其实枚举蛋糕也就-100~100,所以枚举-100~100其实就可以了。#include int x[100001], y[100001];int main() {int n;wh原创 2015-12-13 14:35:47 · 658 阅读 · 0 评论 -
uva1368 - DNA Consensus String
题意: m个长度为n的序列,求一个dna序列,让其他所有序列的总汉明距离最小。输出该序列即最小距离。 思路: 按列枚举,依次求出每列对应的dna序列即可。 代码如下:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 10原创 2016-02-13 13:28:41 · 271 阅读 · 0 评论 -
uva10487 - Closest Sums
题意: 求一个序列中存在的两个数之和sum与给定数k的差距的最小值 思路: 做法很残暴,直接不抱希望地暴力了,居然过了。 看到大家几乎用的都是二分,+。+ 可自行百度。 代码如下:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const in原创 2016-02-28 22:27:48 · 225 阅读 · 0 评论