题意:参考之前讲回溯法的最后一个问题。
思路:枚举全排列,考察每一种排列下的结果。 也可以进行剪枝优化,也是参见之前讲回溯法的部分。
这里我是用二维数组g来存边关系,但顶点还是单独保存在一个数组里,然后排序,然后求排列。
这题居然交了9次,1CE1TLE1AC6WA,CE的原因是没有包含cstring,在本地没包含可以。。。TLE原因是没有注释掉freopen。WA的原因之前一直以为是...
分类:
其他好文 时间:
2015-03-07 20:02:45
阅读次数:
315
五大常用算法之一:贪心算法 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略....
分类:
编程语言 时间:
2015-03-07 19:54:44
阅读次数:
192
深度优先搜索使用的策略是,只要与可能就在图中尽量“深入”。DFS总是对最近才发现的结点v出发边进行探索,知道该结点的所有出发边都被发现为止。一旦v的所有出发边都被发现了,搜索就回溯到v的前驱结点(v是经该结点才被发现的),来搜索该前驱结点的出发边。该过程持续知道从源结点可以到达的所有结点都被发现.....
分类:
编程语言 时间:
2015-03-07 18:21:51
阅读次数:
120
N 皇后问题是一个古老而著名的问题, 是回溯算法(back track)的典型案例。问题描述如下:
N x N 的棋盘上放置N个皇后。 要求同一行中, 同一列中, 以及对角线上(包括正负对角线)只能有一个皇后, 否则就会发生clash的情况而失败。 问解决方案?
解决思路如下:
(1)逐列扫描, 从最左边的列开始, 总共有N个queens。
(2)如果所有的queens 都被安全放置了, ...
分类:
其他好文 时间:
2015-03-07 17:18:46
阅读次数:
211
题意:类似于8皇后问题,只不过棋盘上每个格子都有个分数,皇后所在的位置即可以得到的分数。还是8皇后问题的规则,最后求得最大可得到的分数。
思路:8皇后问题解法,在放完8个皇后后判断一下得到的分数就行了。
在 if 语句的判断内容那块竟然还写错一次,不满意~
也可以用vis[3][2*8];数组标记,然后会快一点
Code:
#include
void dfs(int cur,int s...
分类:
其他好文 时间:
2015-03-07 14:14:02
阅读次数:
177
题目链接:N-Queens
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
Given an integer n, return all distinct solutions to the n-queens...
分类:
其他好文 时间:
2015-03-07 11:39:45
阅读次数:
179
题目链接:N-Queens II
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
这道题的要求是返回N皇后问题总共有多少不同情况。
和N-Queens问题一样,同样的思路,至少这个是统计数量...
分类:
其他好文 时间:
2015-03-07 11:38:06
阅读次数:
132
一、子集树 子集树:当所给的问题是从n个元素的集合S中找出满足某种性质的子集时,相应的解空间称为子集树。例如,那个物品的0-1背包问题所相应的解空间树就是一颗子集树。这类子集问题通常有2^n个叶节点,其节点总个数为2^(n+1)-1。遍历子集树的任何算法均需要O(2^n)的计算时间。\void .....
分类:
其他好文 时间:
2015-03-05 19:05:34
阅读次数:
121
题意:给出一些圆的半径,把所有圆放到一个矩形里,要求所有圆都必须与矩形的最下边相切,求矩形的最小长度。
本来写得很快,以为是一道水题,结果有太多情况没考虑。。我是按照最左圆的半径加上每两相切圆的圆心间水平距离再加上最右圆的半径写的,有太多情况没考虑。一会补上一个,缝缝补补的,现在都有些晕了,现在还遗漏的情况是,我只考虑了第二个圆比第一个圆能到更左,以及倒数第二个圆比倒数第一个圆能到更右,但是第三...
分类:
其他好文 时间:
2015-03-04 22:44:56
阅读次数:
163
题意:只能交换相邻的数。要把一个数组这样交换以形成升序。问最少交换次数的不同交换顺序有多少种。
思路:还是没想到,看到别人题解中一句话,茅塞顿开:每次从头选两个需要交换的位置进行交换。只有降序才需要交换,而且可以看到每次降序的调换都是有意义的。这样每次从头找一个需要交换的位置,就是不同的方案。当某次从头扫描到尾没有需要交换的位置时,则已经排好序,就是交换次数,用一个flag变量标志。
0.02...
分类:
其他好文 时间:
2015-03-04 16:57:36
阅读次数:
128