![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
暴力求解 - 回溯法-简单
文章平均质量分 63
buxizhizhou530
这个作者很懒,什么都没留下…
展开
-
UVa 539 卡坦岛
题意:某游戏的玩家会建造一些公路,公路是连接两个岛的,这样形成一个图。顶点是岛,边是公路,且边长均为1。要求每条边只能走一遍,这样最长的公路是多长。思路:回溯法。以所有的点都开始枚举一次。由于这里每条边只能访问一次,而顶点是可以访问多次的,所以不能简单地用vis[26]数组来判断,而是用g[][]的值来表示边的条数,这样,输入时边的相应g值++,选择一条边时,则相应g值--。这样没要输出路径,原创 2015-03-02 22:04:53 · 822 阅读 · 0 评论 -
UVa 193 图着色
题意:给一个图,可以染白色和黑色,但是染黑色的结点不能相邻。求最多的黑色结点个数,和一种可能的黑色结点序列。思路:这个用回溯法还是很容易想到怎么写的。dfs每一个位置,知道所有位置dfs完。对每个位置都尝试黑色和白色。如果染黑色,那么就需要把和它相邻的结点染成白色,因为他们必须是白色,如果发现有相邻结点已经是黑色,则当前结点不能是黑色;而因为dfs后需要对辅助的全局变量进行恢复,所以这里在将相原创 2015-03-09 11:08:25 · 742 阅读 · 0 评论 -
UVa 167 苏丹的继承者
题意:类似于8皇后问题,只不过棋盘上每个格子都有个分数,皇后所在的位置即可以得到的分数。还是8皇后问题的规则,最后求得最大可得到的分数。思路:8皇后问题解法,在放完8个皇后后判断一下得到的分数就行了。在 if 语句的判断内容那块竟然还写错一次,不满意~也可以用vis[3][2*8];数组标记,然后会快一点Code:#includevoid dfs(int cur,int s原创 2015-03-07 12:07:54 · 1096 阅读 · 0 评论 -
UVa 140 带宽
题意:参考之前讲回溯法的最后一个问题。思路:枚举全排列,考察每一种排列下的结果。 也可以进行剪枝优化,也是参见之前讲回溯法的部分。这里我是用二维数组g来存边关系,但顶点还是单独保存在一个数组里,然后排序,然后求排列。这题居然交了9次,1CE1TLE1AC6WA,CE的原因是没有包含cstring,在本地没包含可以。。。TLE原因是没有注释掉freopen。WA的原因之前一直以为是原创 2015-03-07 19:55:10 · 930 阅读 · 0 评论 -
UVa 10012 有多大 没AC,待修改
题意:给出一些圆的半径,把所有圆放到一个矩形里,要求所有圆都必须与矩形的最下边相切,求矩形的最小长度。本来写得很快,以为是一道水题,结果有太多情况没考虑。。我是按照最左圆的半径加上每两相切圆的圆心间水平距离再加上最右圆的半径写的,有太多情况没考虑。一会补上一个,缝缝补补的,现在都有些晕了,现在还遗漏的情况是,我只考虑了第二个圆比第一个圆能到更左,以及倒数第二个圆比倒数第一个圆能到更右,但是第三原创 2015-03-04 21:50:17 · 936 阅读 · 0 评论 -
UVa 331 交换的方案数 (回溯法,启发)
题意:只能交换相邻的数。要把一个数组这样交换以形成升序。问最少交换次数的不同交换顺序有多少种。思路:还是没想到,看到别人题解中一句话,茅塞顿开:每次从头选两个需要交换的位置进行交换。只有降序才需要交换,而且可以看到每次降序的调换都是有意义的。这样每次从头找一个需要交换的位置,就是不同的方案。当某次从头扫描到尾没有需要交换的位置时,则已经排好序,就是交换次数,用一个flag变量标志。0.02原创 2015-03-04 16:17:17 · 823 阅读 · 0 评论 -
UVa 10344 算23点
题意:有5个数,3种运算符:加、减、乘,用全部5个数,和4个运算符,构成一个表达式,使得值为23,这里没有运算符的优先级,全部是从左往右算。是可以这么理解,题目给的是从左到右依次打了括号。思路:这里是对表达式的位置进行dfs。可以看到第0位是数字,第1位是运算符,依次则,偶数位是数字,奇数位是运算符。dfs中把当前位置cur分为奇偶分别处理。偶数位置时,则对数字进行枚举,并计算当前表达式的值,原创 2015-03-03 20:58:14 · 911 阅读 · 0 评论 -
UVa 639 放车问题
题意:给定一个 n x n 的棋盘,在上面放置车。其中.号表示可放置,X表示墙。在同一行或同一列的两个车,如果它们之间没有X墙挡着,则是不合法的放置。给定一棋盘,最多可以放置车的数量。思路:枚举所有的格子,看是否可以在此放置。每次放一个车后,修改棋盘的横行、竖列直到X的位置为1,即不可放置。因为要修改棋盘,所以需拷贝一个过来,修改拷贝的。还有一些注意的,如注释,总感觉写得不是很简洁。还有就原创 2015-03-02 19:26:10 · 774 阅读 · 0 评论 -
UVa 216 网络连线
题意:给出一些电脑的二维坐标,连接两个电脑所用网线长为它们之间的直线距离再加上16 feet。要求把所有电脑连成一个串,怎样连,使得所用网线最短,并且按从一端到另一端的顺序输出连接的两个电脑间的距离。思路:很容易想到的就是暴力枚举,将所有电脑做一个全排列,求得总长最小值的那个。这里用的递归枚举、即回溯法,进行了剪枝优化。第一次交WA了,重读题目、看别人题解,都没找到原因。看到别人的freo原创 2015-03-02 15:18:12 · 827 阅读 · 0 评论 -
UVa 208 救火车
题意:先给出离出火地点最近的路口,然后给出一些之间通畅的路口。要求给出所有从1号路口到火灾事故点的不含回路的简单路径。思路:方法很容易想到,dfs即可。但是简单的dfs会超时,3s+. 之后看别人用了并查集,去了解了下并查集的思想。这里可以通过并查集提前判断一个路口是否和火灾路口想通,如果不通,则直接剪枝了。别看仅这一个优化,最后AC时间0.022,性能提升还是很多的。因为你早早地剪去一个结点原创 2015-03-12 21:29:45 · 803 阅读 · 0 评论