深度优先搜索(Depth First Search)
Date:2019-07-01 15:31:11
- 通俗点理解就是不撞南墙不回头的那种,用栈来实现
算法实现
/*
题目描述:
有n件物品,每件物品的重量为w[i],价值为c[i]。现在需要选出若干件物品放入一个容量为V的背包中,
使得在选入背包的物品重量之和不超过V的前提下,让背包中物品的价格之和最大,求最大价值(1<=n<=20)。 Sample input:
5 8 //n=5,V=8
3 5 1 2 2 //w[i]
4 5 2 1 3 //c[i]
Sample output:
10
*/ #include <cstdio>
const int MAX_SIZE = ;
int n, V, maxValue = ;
int w[MAX_SIZE], c[MAX_SIZE]; void DFS(int index, int sumW, int sumC)
{
if(index == n)
return ;
DFS(index+, sumW, sumC); //index不放入背包中
if(sumW + w[index] <= V) //剪枝:通过题目条件的限制来减少DFS的计算量
{
if(sumC + c[index] > maxValue)
maxValue = sumC + c[index];
DFS(index+, sumW+w[index], sumC+c[index]); //index放入背包中
}
} int main()
{
freopen("Test.txt", "r", stdin);
scanf("%d%d", &n, &V);
for(int i=; i<n; i++)
scanf("%d", &w[i]);
for(int i=; i<n; i++)
scanf("%d", &c[i]);
DFS(,,); //初始条件
printf("%d\n", maxValue);
} /*
题目描述:
给定N个整数(可能有负数),从中选择K个数,使得这K个数之和恰好等于一个给定的整数X;
如果有多种方案,选择他们中元素平方和最大的一个。数据保证方案唯一。
Input Specification:
从4个整数{2,3,3,4}中选择2个数,使它们的和为6,显然有两种方案{2,4},{3,3},其中{2,4}平方和最大。
*/ //序列A中n个数里选择k个数使得和为x,最大平方和为maxSumSqu
int n, k, x, maxSumSqu=-, A[maxn];
//temp存放临时方案,ans存放平方和最大方案
vector<int> temp, ans; //当前处理index号整数,当前已选整数个数为nowK
//当前已选整数之和为sum,当前已选整数平方和为sumSqu
void DFS(int index, int nowK, int sum, int sumSqu)
{
if(nowK==k && sum==x)
{
if(sumSqu > maxSumSqu)
{
maxSumSqu = sumSqu;
ans = temp;
}
return ;
} //已经处理完n个数,或者超过k个数,或者和超过x,返回
if(index==n || nowK>k || sum>x)
return ;
//选index号数
temp.push_back(A[index]);
//若可以重复选择数字,则把index+1改为index即可,即index号数字可以重复选择
DFS(index+, nowK+, sum+A[index], sumSqu+A[index]*A[index]);
temp.pop_back();
//不选index号数
DFS(index+, nowK, sum, sumSqu);
}
深度优先搜索(Depth First Search)的更多相关文章
- [算法&数据结构]深度优先搜索(Depth First Search)
深度优先 搜索(DFS, Depth First Search) 从一个顶点v出发,首先将v标记为已遍历的顶点,然后选择一个邻接于v的尚未遍历的顶点u,如果u不存在,本次搜素终止.如果u存在,那么从u ...
- javascript实现的图数据结构的广度优先 搜索(Breadth-First Search,BFS)和深度优先搜索(Depth-First Search,DFS)
最后一例,搞得快.三天之内走了一次.. 下一步,面象对像的javascript编程. function Dictionary(){ var items = {}; this.has = functio ...
- (转)广度优先搜索BFS和深度优先搜索DFS
1. 广度优先搜索介绍 广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索"或"横向优先搜索",简称BFS. 它的思想是:从图中 ...
- 常用算法2 - 广度优先搜索 & 深度优先搜索 (python实现)
1. 图 定义:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合. 简单点的说:图由节点和边组成.一 ...
- 算法与数据结构基础 - 深度优先搜索(DFS)
DFS基础 深度优先搜索(Depth First Search)是一种搜索思路,相比广度优先搜索(BFS),DFS对每一个分枝路径深入到不能再深入为止,其应用于树/图的遍历.嵌套关系处理.回溯等,可以 ...
- 图的遍历之深度优先搜索(DFS)
深度优先搜索(depth-first search)是对先序遍历(preorder traversal)的推广.”深度优先搜索“,顾名思义就是尽可能深的搜索一个图.想象你是身处一个迷宫的入口,迷宫中的 ...
- [LeetCode OJ] Word Search 深度优先搜索DFS
Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...
- 深度优先搜索(深搜)——Deep First Search【例题:迷宫】
深度优先搜索 基本思想:先选择一种可能情况向前探索,在探索过程中,一点那发现原来的选择是错误的,就退回一步重新选择,继续向前探索,(回溯)反复进行. [例题]迷宫问题 ...
- Leetcode之深度优先搜索(DFS)专题-559. N叉树的最大深度(Maximum Depth of N-ary Tree)
Leetcode之深度优先搜索(DFS)专题-559. N叉树的最大深度(Maximum Depth of N-ary Tree) 深度优先搜索的解题详细介绍,点击 给定一个 N 叉树,找到其最大深度 ...
- 深度优先搜索 DFS(Depath First Search, DFS)
深度优先搜索是一种枚举所有完整路径以遍历所有情况的搜索方法.(不撞南墙不回头) DFS一般用递归来实现,其伪代码思路过程一般如下: void DFS(必要的参数){ if (符和遍历到一条完整路 ...
随机推荐
- 深入理解js——构造函数的继承
看了阮一峰的网络日志(http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html),记录一下构 ...
- EL表达式的简单介绍
EL表达式的简单介绍 一.JSP EL语言定义 E L(ExpressionLanguage) 目的:为了使JSP写起来更加简单. 表达式语言的灵感来自于ECMAScript 和 XPath 表达式 ...
- ac自动机暴力跳fail匹配——hdu5880
很简单的题,ac自动机里再维护一个len表示每个状态的串长,用s去query时每到一个结点都要暴力跳fail,因为有可能这个结点不是,但是其fail是危险结点,找到一个就直接break 再用个差分数组 ...
- linux 下vi与vim区别以及vim的使用
vi与vim vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器.他是我们使用Linux系统不能缺少的工具.由于对 ...
- 可持化永久树 的 STL ( rope )
rope 的基本操作 #include <ext/rope> using namespace __gnu_cxx; ]; rope<int> x; rope<int> ...
- CSS:CSS 尺寸 (Dimension)
ylbtech-CSS:CSS 尺寸 (Dimension) 1.返回顶部 1. CSS 尺寸 (Dimension) CSS 尺寸 (Dimension) 属性允许你控制元素的高度和宽度.同样,它允 ...
- jmter 二次开发 IDEA 项目5.1
jmter 二次开发 IDEA 项目5.1 IDEA 编译 Jmeter 5.0(二次开发) 1. Java环境配置 1.1 步骤1 1.2 步骤2 1.3 步骤3 1.4 ...
- 前端(十九)—— Bootstrap框架
Bootstrap Bootstrap中文文档 一.简介 Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML.CSS.JavaScrip ...
- PCA降维-最大,最小方差解释
转自http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html http://www.cnblogs.com/jerrylead/ ...
- idea一直在copying resources或者一直在build,卡住不动,问题已解决
IDE在启动项目的过程中,一直copying,或者是build一直卡住,需要在modules中配置下,把target文件夹移出resource folder 同时,在此之前,我还屏蔽了项目中pom.x ...