随笔分类 - DFS
摘要:深度优先搜索 dfs 概念: 从一个点开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回上一个节点,然后从另一条路开始走到底,这种尽量往深处走的概念就是深度优先。 模板:
阅读全文
摘要:[2004年NOIP普及组] 火星人 分析:根据题意,要在题中给出的排列组合的基础上,加上m,形成一个新的排列组合。因为全排列是按照从小到大的顺序进行的,所以我们可以转化为全排列问题,m是几就代表进行几次全排列,所以进行m次全排列后的数就是题目中要求的数。在这里有一个全排列函数next_permut
阅读全文
摘要:[2001年NOIP提高组] 数的划分 分析:根据题意,一个数按要求的组数划分,也就是求这个数被拆解成规定组数有几种可能,为了确保出现过的方案不再重复,可以规定在后面分组中的数必须大于前面分组中的数,x代表上一个出现的数,初始值为1(也就是从1开始循环),以此类推便可达成上述方案,s代表还需要递归多
阅读全文
摘要:[2002年NOIP普及组] 选数 分析:根据题意,在所给的四个数中选择三个数相加,看看其中的和有几个是素数,用递归求出所有的可能性,在求的时候要写好递归终止的条件,然后单独写一个判断素数的函数,如果是素数满足要求的数就+1,输出有几个满足要求的数。 #include<iostream> #incl
阅读全文
摘要:N 皇后问题 分析:根据题意,用dfs求解,在一个皇后放置后,他所在的列和两个对角线都要被标记,而他所在的行在占领后就不会再被遍历,在列和对角线都没有被标记时,证明这个位置可以放置皇后,就在这个位置放置皇后然后标记他的列和对角线,递归结束的标志是n个皇后放置完毕,输出n个皇后所在的列号。 #incl
阅读全文
摘要:全排列问题 分析:根据题意,要求输出数字的所有排列组合,最主要的是写一个dfs函数。在函数中要规定循环结束的条件,也就是所有的数排列完成,然后再按照题意输出,在循环中如果这个数没有被标记(提前设了一个标记数组)说明这个排列组合还没有出现过,就保存下现在的数,将他标记,然后进行下一轮递归,回溯时清空标
阅读全文