深度优先搜索
来源:互联网 发布:js post方式下载文件 编辑:程序博客网 时间:2024/04/30 19:50
学了很多的算法 ,但从来没有总结过。现在开始工作了,就此开始总结大学学习的计算机算法,以告慰我即将逝去的大学生活。
深度优先搜索
深度优先搜索(DFS)是搜索的手段之一,也是数据结构中的重难点,它从某个状态开始,不断的转移状态,直到状态无法转移,然后回退到前一个状态,继续转移到其它状态,如此不断重复,直到找到最终解,或搜索完全部的状态。列如求解数独,首先在某个格子内填入适当的数,然后再继续在下一个格子内填入数字,如此继续下去。如果发现某个格子无解了,就放弃一个格子上选择的数字,改用其它可行的数字。根据深度优先搜索的特点,采用递归函数实现比较简单。
题目:
部分和问题
给定整数a1、a2、···an,判断是否可以从中选出若干数使得他们的和为k.
限制条件:
1<=n<=20
ai、k不操过int行范围
输入:
n = 4
a = {1,2,4,7}
k = 12
输出:
YES {13 = 2 + 4 + 7}
#include <iostream>using namespace std;#define MAX_N 20int num[MAX_N];int n,k;bool hash[MAX_N];bool dfs(int i,int sum){ if(sum == k) { return true; } if (i >= k) { return false; } hash[i] = false;//取第i个数 if(dfs(i+1 , sum+num[i])) return true; hash[i] = true;//不取第i个数 if(dfs(i+1 , sum)) return true;return false;}int main(){ cin>>n; int i; for(i=0;i<n;i++) { cin>>num[i]; hash[i] = true; } cin>>k; if(dfs(0,0)) { cout<<"YES"<<'{'<<k<<'='; for(i=0;i<n;i++) if(!hash[i]) { cout<<num[i]; break; } for(i++;i<n;i++) if(!hash[i]) { cout<<'+'<<num[i]; } cout<<'}'<<endl; } return 0;}
0 0
- 深度优先搜索
- 深度优先搜索
- 深度优先搜索 DFS
- 深度优先搜索遍历
- 深度优先搜索 DFS
- 深度优先搜索
- 深度优先搜索
- 深度优先搜索算法
- hdoj1015Safecracker(深度优先搜索)
- [AI]深度优先搜索
- 深度优先搜索算法
- DFS 深度优先搜索
- 深度优先搜索
- 深度优先搜索算法
- 图解深度优先搜索
- 深度优先搜索
- 深度优先搜索
- 深度优先搜索算法
- Spring MVC静态文件访问
- 工作中常用到的解压缩命令
- php基础知识
- 调试中的心理因素
- 二分搜索
- 深度优先搜索
- 【hadoop之翊】——hadoop配置ssh免密码登录,解决ssh设置好了依然需要输入密码的问题
- 自定义jsp标签入门
- day_2 servlet 三种开发方法
- C++primer学习笔记(1)
- ADB server didn't ACK 是怎么回事?安卓虚拟机无法安装App
- visual studio 2010 创建的MFC ActiveX 控件的工程 不能运行 提示:无法启动.ocx程序
- c# 在WinForm 窗体间传递信息(转换为VB.net)
- 圆的表面积和体积