深度优先搜索(DFS)——部分和问题
来源:互联网 发布:gta5捏脸数据御姐 编辑:程序博客网 时间:2024/06/05 11:09
对于深度优先搜索,这里有篇写的不错的博客:DFS算法介绍 。总得来说是从某个状态开始,不断的转移
状态知道无法转移,然后回到前一步
的状态.如此不断的重复一直到找到最终的解。根据这个特点,常常会用到递归。
应用:部分和问题
【题目链接:NYOJ-1058】
#include<cstdio>#include<stack> #include<cstring>using namespace std;//部分和问题:const int maxn = 22;stack<int>v;int a[maxn];int n, m, i, j, k;bool dfs(int i = 0, int sum = 0) //已经从前i项得到了和sum,然后对于i项之后的进行分支{ //停止条件 :如果前n项都计算过了,则返回sum是否与k相等 if (i == n) return sum == k; //选择加或不加a[i] //不加a[i]的情况 if (dfs(i + 1, sum)) return true; //加上a[i]的情况 if (dfs(i + 1, sum + a[i])) { //若执行该条件,就说明该a[i]符合条件 v.push(a[i]);//压栈 return true; } return false; //无论是否加上a[i]都不能凑成k就返回false;}int main() { while (~scanf("%d%d", &n, &k)) { for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } if (dfs()) { printf("YES\n"); while (!v.empty()) //把 满足dfs函数中的数 全部取出(从上往下) { int x = v.top(); printf("%d ", x); v.pop(); } printf("\n"); } else printf("NO\n"); } return 0;}
阅读全文
0 0
- 深度优先搜索(DFS)——部分和问题
- nyoj 部分和问题(深度优先搜索DFS)
- 算法——深度优先搜索(DFS)和广度优先搜索(BFS)
- 深度优先搜索之部分和问题
- 深度优先搜索----部分和问题
- 部分和问题,深度优先搜索
- NYOj-部分和问题-深度优先搜索
- 深度优先搜索DFS(迷宫问题)
- 白书2.1.4 深度优先搜索(部分和问题)
- NYOJ1058+NYOJ1282 部分和问题(深度优先搜索DFS入门题)
- DFS——深度优先搜索基础
- 深度优先搜索——DFS遍历
- DFS-深度优先搜索—2
- 深度优先搜索算法—DFS
- 深度优先搜索遍历(DFS)——邻接矩阵存储
- DFS-深度优先搜索(Depth First Search)—1
- 深度优先搜索 (DFS)
- 深度优先搜索(DFS)
- <安彦>Spring MVC运行原理及案例
- CI Weekly #8 | CI/CD 技能进阶路线
- 批处理解约瑟夫环应用题-shell
- Sass基本特性--运算(加法、减法、乘法、除法、变量运算、数字运算、颜色运算、字符运算)
- spark性能调优的本质、Spark资源使用原理和调优要点分析
- 深度优先搜索(DFS)——部分和问题
- 203. Remove Linked List Elements
- Android_判断手机网络状态
- [LeetCode]150. Evaluate Reverse Polish Notation
- Linux设备树-未完成
- 两行命令搞定数据库变数据框
- 欢迎使用CSDN-markdown编辑器
- java volatile 线程间的变量可见性
- HDU-6184 (无向图三元环计数)