深度优先搜索 - 简单demo
输入一个数n,输出 1 ~ n 的全排列,例如输入 3,全排列则为:123,132,213,231,312,321 一共六种。
这里采用深度优先搜索来解决这个问题:
#include<stdio.h> int n;
int a[],book[]; //递归核心代码
void dfs(int step)
{
if(step == n+){ //递归结束条件
for(int i=;i<=n;i++){
printf("%d",a[i]);
}
printf("\n"); return; //返回上一步
}else{
for(int i=;i<=n;i++){//当下该怎么做
if(book[i]==){
book[i]=; //进行放入
a[step]=i; //放入第step步
dfs(step+); //深度下一节
book[i]=; //进行回收(非常重要的一步)
}
}
return;
}
} int main()
{
scanf("%d",&n);
dfs();
getchar();
return ;
}
理解深度优先搜索的关键在于解决“当下该如何做”。至于“下一步如何做”,则与“当下该如何做”事一样的。下面代码就是深度优先搜索的基本模型。
void dfs(int step)
{
//判断边界
//尝试每一种可能
for(int i = ; i <= n; i++){
//继续下一步
dfs(step+);
}
}
代码解读:
当我们输入12,代码执行,一路执行,放入数字
一路到1,2,3,4,5,6,7,8,9,10,11,12,这时候在下一节点碰到 step == n+1,
已经没有下一节点了,直接输出全排列,1,2,3,4,5,6,7,8,9,10,11,12,同时进行返回,返回到第12步,
第12步执行回收代码:book[i] = 0 ,将12回收,继续退回到11步,
在第11步,先回收了11,在for循环中,继续前进,到达第12次for循环,因此放入12,继续深度下一节点
此时,只剩下11,放入,继续下一节点,碰到 step == n+1
已经没有下一节点了,直接输出全排列,1,2,3,4,5,6,7,8,9,10,12,11,同时进行返回,返回到第12步,
在第12步回收代码。。。。。。。
以此类推,直至全部搜索完毕
深度优先搜索 - 简单demo的更多相关文章
- 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)
深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析
转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...
- 深度优先搜索(DFS)
[算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...
- 回溯 DFS 深度优先搜索[待更新]
首先申明,本文根据微博博友 @JC向北 微博日志 整理得到,本文在这转载已经受作者授权! 1.概念 回溯算法 就是 如果这个节点不满足条件 (比如说已经被访问过了),就回到上一个节点尝试别 ...
- Solr配置与简单Demo[转]
Solr配置与简单Demo 简介: solr是基于Lucene Java搜索库的企业级全文搜索引擎,目前是apache的一个项目.它的官方网址在http://lucene.apache.org/sol ...
- [算法&数据结构]深度优先搜索(Depth First Search)
深度优先 搜索(DFS, Depth First Search) 从一个顶点v出发,首先将v标记为已遍历的顶点,然后选择一个邻接于v的尚未遍历的顶点u,如果u不存在,本次搜素终止.如果u存在,那么从u ...
- 利用广度优先搜索(BFS)与深度优先搜索(DFS)实现岛屿个数的问题(java)
需要说明一点,要成功运行本贴代码,需要重新复制我第一篇随笔<简单的循环队列>代码(版本有更新). 进入今天的主题. 今天这篇文章主要探讨广度优先搜索(BFS)结合队列和深度优先搜索(DFS ...
- WPF实现主题更换的简单DEMO
WPF实现主题更换的简单DEMO 实现主题更换功能主要是三个知识点: 动态资源 ( DynamicResource ) INotifyPropertyChanged 接口 界面元素与数据模型的绑定 ( ...
- 常用算法2 - 广度优先搜索 & 深度优先搜索 (python实现)
1. 图 定义:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合. 简单点的说:图由节点和边组成.一 ...
随机推荐
- 社交类APP原型模板分享——Tinder
Tinder是国外的一款手机交友APP,作用是基于用户的地理位置,每天“推荐”一定距离内的四个对象,根据用户在 Facebook 上面的共同好友数量.共同兴趣和关系网给出评分,得分最高的推荐对象优先展 ...
- maven 编译的时候总是报一些奇怪的错误 比如 surefire-boot 2.10 .jar 可是私服里查看本来就没有这个高的版本。
或者私服总是 报 read time out , 或者 io 错误, 或者 gzip 解压错误,或者总是尝试下载一些高版本的jar , 而这些jar 可能是不存在的 .. 尝试 重新下载 apac ...
- 配置tomcat server.xml 文件 ,虚拟路径
<Context path="/web" docBase="D:\workspace\web\src\main\webapp" reloadable=& ...
- springmvc cfx 整合
1.先看一下目录列表,本人用的是eclipse 2.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xm ...
- windows 安装配置jdk7
1.安装jdk这里不在介绍 2.配置新建用户变量:JAVA_HOME 值为(就是你自己jdk的安装路径):C:\Program Files\Java\jdk1.7.0_75\ 3.配置系统变量:Pat ...
- Devexpress VCL Build v2014 vol 14.2.5 发布
和xe8 几乎同一天出来,但是目前官方不支持xe8. The following sections list all minor and major changes in DevExpress VCL ...
- 2018.10.09 NOIP模拟 好数(双向搜索)
传送门 直接双向搜索出两边可行解,然后把两边的可行解合并起来得出答案就行了. 注意合并的时候可以利用排序和单调性优化时间复杂度. 直接枚举合并是O(siza∗sizb)O(siza*sizb)O(si ...
- DIV+CSS实战(二)
一.说明 在DIV+CSS实战(一)中,已经把框架搭建起来了,现在就需要往框架里面添加内容了.需要实现的内容如下图: 二.头部的设计(全媒体订阅) 左侧是一张图片+标题 ,右侧是登录名 和上次登录的时 ...
- 使用百度webuploader实现大文件上传
版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...
- web.xml 404 500 配置
web.xml <error-page> <error-code>404</error-code> <location>/error404.html&l ...