![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索-回溯法
进程击序的媛
身体和灵魂,健身与学习,都在路上。
展开
-
天平难题(Mobile Computing, ACM/ICPC Tokyo
1.重点是求子集的代码 for (int l = (s - 1)&s; l > 0; l = (l - 1)&s), 这里通过l可以求出s的所有子集。可以举一个例子来理解 。假设s = 1010 1100, 将s的0,2,4,5位抽出是1111第一次, s-1 = 1010 1011 l = (s-1)&s = 10101000 l的 0,2,4,5位抽出是1110第二次, l原创 2017-07-08 09:14:47 · 429 阅读 · 0 评论 -
带宽(Bandwidth,UVa 140
本题用回溯法,将已经排列好的节点放在数组a中,并且记录下此时数组a的带宽值,这里的带宽值是作为函数参数传递的,即now_bandwith如果a中的节点数等于输入的节点数,则此时为一个全排列,如果这个排列的带宽值比已经保存的最小带宽值小,那么保存该排列和带宽值即可。为了优化代码,这里用到了剪枝的方法,当a中的排列的带宽值已经大于当前保存的最小带宽时,就没必要继续往a中加入元素了,也就不继续递原创 2017-07-07 21:02:46 · 580 阅读 · 0 评论 -
困难的串(Krypton Factor,UVa 129)
回溯法注意一定要写47行的if(count == n) return;否则递归不会终止17行的if(q > i) ok = 0 去掉也能ac,不过还是写上逻辑清晰 ,因为可能存在p先到达0但是q没到达i的情况,则两个子串不相邻,我这个算法会出现这种情况,没有学过好的判断相同子串的办法,暂时想到这个了#include using namespace std;const i原创 2017-07-07 11:11:37 · 296 阅读 · 0 评论 -
素数环(Prime Ring Problem, Uva 524)
回溯法#include #include #include using namespace std;const int maxn = 16 + 5;int circle[maxn];int visit[maxn];int n;bool is_prime(int n){ int k = sqrt((double)n); int ok = 1; for(int i = 2;原创 2017-07-07 09:16:52 · 179 阅读 · 0 评论 -
八皇后问题
参考书籍《算法竞赛入门经典》刘汝佳设置一个数组int c[maxn] ,c[i] = k 表示第i行第k列放了一个皇后,因此,原问题可以表示为对0-n进行全排列(对于八皇后问题,n是7),在这些排列中筛选出符合条件,即互不攻击的排列放入数组c那么怎么判断c[cur]是否与当前已经放入的皇后发生冲突呢,这里设置了一个visit[3][maxn*2]的数组,visit[0][i] = 1表示第原创 2017-07-06 21:43:28 · 151 阅读 · 0 评论