暴力求解--搜索
omsobliga
这个作者很懒,什么都没留下…
展开
-
167 - The Sultan's Successors(****)八皇后问题
/* 推荐题型:四星,没有解出。。。 带权值的八皇后问题 思路:按行进行搜索,数组p记录每行皇后所在列。 每次搜索到第八行,进行一次处理即可。 */ #include #include int G[10][10]; int a[10],b[10],c[20]; int p[10]; int ans; void dfs(int cur) { if(cur==8) { int num=0原创 2012-02-17 22:10:35 · 718 阅读 · 0 评论 -
307 Sticks(*****)经典DFS+剪枝
/* 推荐题型:五星 经典DFS + 剪枝 题意:长度相同的木棒被分成许多段,求木棒原来状态的最短长度 此题重在剪枝,主要剪枝思路有: 使用数组a存储被分解成的各个部分的长度,木棒的每段被称之为s ①搜索范围从max到sum,且必须能被sum整除 ②为避免重复,组合成木棒的s从大到小排序,每根木棒的第一个s,也要求从大到小排序 ③在某层搜索中,如果a[i]没有使用,且a[i]==a[i+1],则原创 2012-03-09 22:29:48 · 793 阅读 · 0 评论 -
331 Mapping the Swaps(***)题不错
/* 使用冒泡排序更好,WA 思路:首先计算出最小移动次数,再进行dfs深搜 思路很重要,有了思路就去实现,如果思路能够得到一些改进更好! */ #include #include int n; int A[10]; int min; int ans; int c[50]; int search() { int AA[10]; memcpy(AA,A,sizeof(A)); int i原创 2012-03-09 22:28:33 · 540 阅读 · 0 评论 -
539 The Settlers of Catan
/* 一次AC,简单题 纠错经历: ①处需要正反标记 题意:每一条边只能走一次,求最长线。 思路:回溯 */ #include #include int n,m; bool G[30][30],visit[30][30]; int ans; void dfs(int cur,int count) { bool ok=false; for(int i=0;i<n;i++) if(G[c原创 2012-03-06 06:38:12 · 684 阅读 · 0 评论 -
639 Don't Get Rooked
/* 一次AC,题不难。 找错经历: ①处出错,不能使用sizeof()计算形参中数组长度 ②G的状态应分三种情况讨论。 题意:一个棋盘,放置rook,要求不能在同一行或同一列,除非中间有墙。 思路:回溯+状态存储,G值为0表示有墙,为1表示可放,为-1表示有冲突。 */ #include #include int n; int ans; void dfs1(int (*G)[7],int原创 2012-03-06 06:36:42 · 593 阅读 · 0 评论 -
193 - Graph Coloring(*****)推荐入门
/* 推荐题型:五星 题意:对图中节点进行染色,只有黑白可选,要求相邻节点不同色,问黑色最多可有多少个 思路:深度搜索、记忆数组 */ #include #include const int nMax=107; int G[nMax][nMax]; int ans[nMax],res,n; //answer,result void dfs(int cur,int *A) { int col原创 2012-02-17 22:09:19 · 534 阅读 · 0 评论 -
140 Bandwidth
/* 题目不难,一次AC 题意:将图中各节点排在一条线上,依次找出各节点到相邻节点的最长距离,各节点最长距离的最大值即为带宽。输出带宽最小的序列,和带宽的值,如果出现多种情况,输出字典序最小的那种。 思路:深搜+回溯+状态存储 */ #include #include #include #include char line[100]; bool G[30][30],visit[30];原创 2012-03-06 06:34:02 · 616 阅读 · 0 评论 -
301 Transportation(****)
/* 推荐题型:四星 题意:从A到B,接受那些订单可使船的受益最大。要求订单要么完全接受,要么完全拒绝 思路:子类枚举,回溯 回溯概念:在递归构造过程中,生成和检查过程有机结合起来,从而减少不必要的枚举。并不仅仅是指将状态恢复到原来的情况。 */ #include #include #include int n1,n2,n3; struct Node { int a; int b;原创 2012-03-06 06:35:47 · 552 阅读 · 0 评论 -
165 Stamps(*****)推荐
/* 推荐题型:五星,题很不错,锻炼思维。想到了要进行两次递归搜索,一次选值,一次判断。但是选值时会出现问题,因为无法知道上届。所以遇到了瓶颈,看别人代码后,很不错。dfs中的嵌套在两条if语句中,所以程序肯定会存在终止的情况。 题意:k种邮票,面值自定,共h张,求可组合成的最大值。要求从1开始连续。 */ #include #include int h,k; int ans[15],res原创 2012-03-06 08:08:58 · 578 阅读 · 0 评论 -
208 Firetruck(****)
/* 推荐:四星。 题意:求从消防站到火场路径有多少,并逐个输出 思路:深度搜索,状态存储 结果程序运行超时 可能存在数据,起点和终点不连通,但起点周围是一个稠密图。 这样会导致程序无解,但耗时很大。 如果可以先把那些可以到达终点的节点找出来,再在其中进行搜索就可避免! 解法一:通过深度搜索找出 解法二:通过并查集 解法三:tarjan算法,未解决。。。 */ //错误代码: #include原创 2012-03-02 22:34:47 · 555 阅读 · 0 评论 -
10012 How Big Is It?(****)
/* 题意:一堆小球,要求使用最小的矩形将它们全部装起来。 要求小球必须接地,至少与其他一个小球相邻 思路:涉及到状态转移,用到动态规划思想。原来通过深搜,剪枝结果WA,后来想到两个相邻小球半径相差很大的情况,于是没有了做题思路。看别人代码后,搜索中添加两个数组,A[i]表示第i个小球的半径大小,c[i]表示第i个小球排完后右边界最远的位置。于是有状态转移方程: c[i]=max(c[j]+2*原创 2012-03-02 22:36:53 · 578 阅读 · 0 评论 -
216 - Getting in Line(***)使用顺序数组存储状态
/* 推荐题型:三星,有技巧要掌握,顺序数组存储状态 题意:每台电脑上之间铺上电缆,问电缆最短为多少 思路:深度优先搜索,递归中使用形参存储搜索状态 */ #include #include #include struct node { int x,y; }com[10]; double G[10][10],res; bool visit[10]; int next[10],ans[10原创 2012-02-18 22:28:40 · 498 阅读 · 0 评论 -
10344 - 23 out of 5(***)
/* 题意:用五个数字和三个运算符组成一个表达式,最后答案是否为23 超时! 不过dfs1和dfs2的搜索顺序变一下可使效率提高一些。小技巧。 不太清楚为什么时间效率会存在不同。。。。 */ #include #include int aa[5],a[5],visit[5]; int o[4]; bool ok; int opre(int a,int op,int b) { int c=0原创 2012-02-18 22:31:01 · 543 阅读 · 0 评论 -
HDU 1010 Tempter of the Bone(奇偶剪枝)
/* 题意:从S到D,能否在T时刻到达 主要使用奇偶剪枝 主要收获: ①奇偶剪枝 ②尽量减少scanf("%c", &c);的使用 */ #include #include #include using namespace std; const int nMax = 8; char map[nMax][nMax]; int visit[nMax][nMax]; int n, m, t;原创 2012-08-16 22:25:11 · 540 阅读 · 0 评论