- 博客(7)
- 资源 (2)
- 收藏
- 关注
原创 回溯法 —— 判断子集和问题是否存在解
判断子集和问题是否存在解分析思路:采用回溯法针对问题存在解时求出相应的一个或多个解,或者最优解。如果需要判断问题是否存在解(一个或者多个),可以将求解函数改为bool型,当找到任何一个解时返回true,否则返回false,但当问题没有解时需要搜索所有空间。法一代码:#include<stdio.h>#define MAXN 20int n=4,W;int w[]={0,11,13,24,7}; //存放所有整数解,不用下标为0的元素bool dfs(int tw,int rw
2020-09-25 20:26:25 1106
原创 回溯法 —— 求解子集和问题
求解子集和问题的解题目描述:给定有n个不同正整数的集合w=(w1,w2,… ,wn)和一个正数W,要求找出w的子集s,式该子集中所有元素的和为W。例如,当n=4时,w=(11,13,24,7),W=31,则满足要求的子集为(11,13,7)和(24,7)分析思路:n=4时,解空间树如图(结点中的数字是结点的编号,例如结点18对应解向量为(1,1,0,1),选择的整数和=11+13+7=31),从i层到i+1层(1<=i<=n)的每一条边标有xi的值,xi或者为1或者为0,xi为1时表示取
2020-09-25 19:54:16 21985 2
原创 回溯法 —— 求解0/1背包问题(剪枝)
0/1背包问题题目描述:有n个重量分别为w1,w2,…,wn的物品(物品编号为1~n),它们的价值分别为v1,v2,…,vn,给定一个容量为W的背包。设计从这些物品中选取一部分物品放入该背包的方案,每个物品要么选中要么选不中,要求选中的物品不仅能够放到背包中,而且具有最大价值,并对下表所示4个物品求出W=6时的所有解和最佳解。分析思路:回溯法设n件物品重量分别为w1,w2,…,wn的物品,用数组w[1 … n]存放,物品的价值分别为v1,v2,…,vn,用数组v[n]存放;限制重量用W表示。用x[
2020-09-25 09:45:32 16632 8
原创 回溯法——设计一个算法在1、2、3... 9(顺序不能变)数字之间插入+ 或 - 或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性和全排列
回溯法题目描述:设计一个算法在1、2、3… 9(顺序不能变)数字之间插入+ 或 - 或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如1+2+34-5+67-8+9=100分析思路:用数组a存放1 ~ 9的整数,用字符数组op存放插入的运算符,op[i]表示在a[i]之前插入的运算符。采用回溯法产生和为100的表达式,op[i]只能取+、- 或者空格。设计函数fun(op,sum,prevadd,a,i)sum:记录考虑整数a[i]时前面表达式计算的整数和(初始值为a[0])
2020-09-20 17:22:31 3823 2
原创 回溯法 —— 算法框架及应用
回溯法:思想:走不通退回走别的路在包含问题的所有解的空间树中,按照深度优先搜索策略,从根节点出发搜索解空间树。活结点:自身已生成但其孩子结点没有全部生成的结点扩展结点:指正在产生孩子结点的结点,E结点死结点:指其所有结点均已产生的节点首先根节点成为活结点,同时也成为当前的扩展结点在当前的扩展结点处,搜索向纵深方向移至一个新结点。这个新结点就成为新的活结点,并成为当前扩展结点。如果在当前扩展结点处不能在向纵深方向移动,则当前扩展结点就成为死结点。此时应往回移动(回溯)至最近的一个活结点处,并使这
2020-09-19 19:45:10 4198
原创 蛮力法 —— 求解迷宫问题 —— DFS和BFS
求解迷宫问题问题描述:有如图8×8的迷宫OXXXXXXXOOOOOXXXXOXXOOOXXOXXOXXOXOXXXXXXXOOOOXOOXXXXXXXO其中,O表示通路方块,X表示障碍方块。假设入口位置为(0,0)出口为右下角方块位置(7,7)设计一个程序求指定入口到出口的一条迷宫路径。分析用n表示迷宫大小,用二维数组Maze存放迷宫,从(x,y)方块可以试探上、下、左、右4个方位。假设总是按从方位0到方位3的顺序试探,各方位对应的水平方向偏移量H[4]={0,1,0,-1}、垂直
2020-09-01 12:04:35 3469
原创 蛮力法 —— 求解幂集问题
求解幂级问题问题描述:对于给定的正整数n(n>=1),求1~n构成的集合的幂集(即由1 ~ n的集合中所有子集构成的集合,包括空集合全集)思路一:穷举法时间复杂度:O(n × 2^n)f()的时间为O(n)将1 ~ n存放到数组a中,求解问题变为构造集合a的所有子集合。设集合a[0 … 2]={1,2,3},其所有集合元素对应的二进制及其十进制对于含n(n>=1)个元素的集合a,求解幂集过程如下:for(i=0;i<2^n;i++){ 将i转换为二进制数b
2020-09-01 10:26:35 3233 1
计算机网络-思维导图源文件
2024-03-01
学生成绩管理系统(源代码)
2020-04-21
Java实验报告(包含课后习题).docx
2020-04-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人