深度优先搜索
来源:互联网 发布:双缝实验说明什么 知乎 编辑:程序博客网 时间:2024/06/15 09:35
一种俗称“不撞南墙不回头”的算法,是一直往下尝试任何一种可能性,然后返回到上一级,上一级尝试完后,返回更上一级。。。。以此类推尝试完全部的可能性。
下面通过数的全排列来说明这个算法
在《啊哈,算法》里面看到一个很好的阐释,这里引用下
把每个数看做一个个扑克牌,比如进行0,1,2,3四个数的全排列,便可以看做有这四个扑克牌,然后有四个盒子,编号为0,1,2,3,很自然想到用数组模拟这个盒子。然后依次向后放扑克牌,知道放完了之后,便取回,放到上一级的盒子里面
#include <iostream>int n ; // 数的数量,即扑克牌数量int arr[10] ; // 盒子数量int book[10] ; // 标记该张扑克牌还在不在手上,在的话为0,不在为1using std :: cout ;using std :: cin ;using std :: endl ;void dfs (int step) { if (step == n + 1) { for (int i = 0 ; i <= n ; i ++) cout << arr[i] << " " ; cout << endl ; return ; } // 说明已经放完了全部的盒子 // 到达边界后,输出后返回 for (int i = 0 ; i <= n ; i ++) { if (book[i] == 0) { // 说明这张扑克牌还在手上,便可以进行尝试 arr[step] = i ; book[i] = 1 ; // 放入盒子中 // 进行这一步的尝试 dfs (step + 1) ; // 去到下一个盒子那里 // 进行下一步尝试 book [i] = 0 ; // 很重要,取回的操作 } } return ;}int main () { cin >> n ; while (n >= 10 || n < 0) { cin >> n ; } dfs (0) ; return 0 ;}
由此可以得到一个关于这个算法的函数模型
void dfs (int step) { 判断边界 尝试每一种可能 for (int i = 0 ; i <= n ; i ++) { 继续下一步 dfs (step + 1) ; } return ;}
0 0
- 深度优先搜索
- 深度优先搜索
- 深度优先搜索 DFS
- 深度优先搜索遍历
- 深度优先搜索 DFS
- 深度优先搜索
- 深度优先搜索
- 深度优先搜索算法
- hdoj1015Safecracker(深度优先搜索)
- [AI]深度优先搜索
- 深度优先搜索算法
- DFS 深度优先搜索
- 深度优先搜索
- 深度优先搜索算法
- 图解深度优先搜索
- 深度优先搜索
- 深度优先搜索
- 深度优先搜索算法
- C# CAD多行文字创建过程中RTF字体设置
- iOS UIScrollView控件介绍
- Popular Cows poj2186
- 关于wampserver重装无法启动服务与curl拓展库无法加载的问题
- 工作 宝箱增加提示
- 深度优先搜索
- es6箭头函数 使用场景
- 前序中序后序java实现
- windows server 2003 IIS的配置
- 浏览器缓存机制
- 0422学习总结(内存、指针、关键字)
- Constraint Layout
- 禁止网页复制的代码
- 微信网页授权多次回调code请求