深度优先搜索(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 (符和遍历到一条完整路 ...
随机推荐
- 【Flutter学习】基本组件之图标组件Icon
一,概述 图标组件(Icon)为展示图标的组件,该组件不可交互,要实现可交互的图标,可以考虑使用IconButton组件. 图标组件相关的几个组件: IconButton:可交互的Icon: Icon ...
- Html加水印和禁用复制和右键(jquery.watermark.js)
近期遇到一个需求,需要在页面背景加上自己的水印和禁止用户在页面复制粘贴 解决: 水印使用的是jquery.watermark.js插件,这个插件可以在html背景上加水印,同时可以设置相关属性值. 相 ...
- jmeter基本问题
jmetet加压的时候不用图像界面(GUI),直接在命令行加压(命令行生成一个report-命令行参数),不做断言,不加监听器--不然会很卡: 进入就meter命令行: 后置处理器可以从HTML页面拿 ...
- Devstack 多节点自动化部署
本文为minxihou的翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihou JmilkFan:minxihou的技术博文方向是 算法&Open ...
- 剑指offer——61平衡二叉树
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 题解: 方法一:使用深度遍历,判断每个节点是不是平衡二叉树,这种从上至下的方法会导致底层的节点重复判断多次 方法二:使用后序遍历判断,这种 ...
- ga统计
<script> (function (i, s, o, g, r, a, m) { i['GoogleAnalyticsObject'] = r; i[r] = i[r] || func ...
- JS设置浏览器缓存,以及常用函数整理
//设置缓存 function set_cache(key,value){ if(key=='') return false; localStorage.setItem(key, value); } ...
- SSD 坏了
系统盘是SSD,系统盘坏了. 桌面所有数据都拿不回来了. 真的无奈啊,来吧,统计一下,有多少东西要重装. VS2008.VS2010.VS2013.VS2015. GITHUB.SVN.VMWare. ...
- C语言结构体指针
#include <stdio.h> int main() { /*************************************************** *结构体指针:指向 ...
- 初探Javascript魅力(1)
转自:CSDN--http://blog.csdn.net/cherry_vicent/article/details/42120149 1.javascript是什么 根据用户的一些操作,然后来 ...