//
//  main.c
//  啊哈 DFS
//
//  Created by 姜凯文 on 2018/6/4.
//  Copyright © 2018年 姜凯文. All rights reserved.
//#include <stdio.h>
int a[10], book[10], n;//此处特别说明下:C语言的全局变量在没有赋值前默认为0,因此这里的book数组无需全部再次赋初值0
//step代表现在在第几个盒子前面
void dfs (int step) {int i;if (step == n+1) {//如果站在第n+1个盒子前面,则表示前n个盒子已经放好扑克牌//输出一种排列(1~n号盒子中的扑克牌编号)for (i = 1; i <= n; i++) {printf("%d", a[i]);}printf("\n");return;//返回之前的一步(最近一次调用dfs函数的地方)}//此时站在第step个盒子面前,应该放那张牌呢//按照1,2,3。。。n的顺序一一尝试for (i = 1; i <= n; i++) {//判断扑克牌i是否在手上if (book[i] == 0) {//开始尝试使用扑克牌a[step] = i;//将i号扑克牌放入第step号盒子中book[i] = 1;//将book[i]等于0表示i号扑克牌在手上//第step个盒子已经放好了扑克牌,接下来需要走到下一个盒子前面dfs(step+1);//这是通过函数的递归调用实现的(最近调用自己)book[i] = 0;//这是非常重要的一步,一定要将刚才尝试的扑克牌收回,才能进行下一次尝试}}return;
}
int main(int argc, const char * argv[]) {scanf ("%d", &n);//输入时要注意n为1~9之间的整数dfs(1);//首先站在1号小盒子前面return 0;
}

上面是原样的书上的代码,下面我已输入n为3来进行一次模拟

首先,我们输入n=3,这意味着这我们要对1,2,3进行全排列(模拟到书中的场景就是有3个小盒子),在我们读入3后,函数调用参数为1,接下来就开始模拟。

第一个盒子,读入1,然后我们在book数组中把1去掉,又一次调用,第二个盒子放入2(按顺序1,2,3来使用但是1已经被使用了),接着再次调用,第三个盒子中被放入3(同上,1,2,已经被放入)。

接下来有一个注意点,我们判断条件是n+1而不是n,所以我们要再往前到不存在的第四个盒子,此时判断错误打印第一条123并返回,此时返回到上一次使用dfs的地方,也就是在第三个盒子那里,我们将3收回,但是for循环已经结束,此时我们又要进行一次返回(这一次我们只是收回了3)

这一次返回我们回到了第二个盒子(收回了2),这是循环到3的位置,正好将3放入,继续调用到了盒子3前面,此时for循环是从1开始的(切记,这是新使用的),正好将我们手上的2放入,又到了盒子4,于是打印132,然后返回到盒子3(收回2),执行for循环但三不在我们手里于是再返回到盒子2,收回盒子2中的3但这个for循环又结束了,于是再返回(此时我们手上有3,2)

返回到盒子1了(收回1),执行for循环,放入2,接下来就是重复上面的步骤。

大概就这样,我可能描述的不是很清楚,因为有很多重复的话,希望最好还是对照着书来看。

————我是太阳骑士索拉尔,愿太阳永照心中

浅谈dfs深度优先搜索(基于啊哈算法)相关推荐

  1. 图:DFS(深度优先搜索)图解分析代码实现

    文章目录 一.简介 二.图的建立 2.1建立图类 2.2建立图 三.DFS 3.1图解 3.2代码 一.简介 图的DFS(深度优先搜索)与BFS(广度优先搜索)是图的两种遍历方式. 主要区别在于当到达 ...

  2. DFS——深度优先搜索基础

    [0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 review DFS--深度优先搜索 的基础知识: [1]深度优先搜索的应用 1.1)深度优先搜索算法描述(转自 ...

  3. 【算法】蓝桥杯dfs深度优先搜索之排列组合总结

    [导航] 上一篇文章 → <[算法]蓝桥杯dfs深度优先搜索之凑算式总结>   为了重申感谢之意,再次声明下文的大部分灵感均来自于[CSDN]梅森上校<JAVA版本:DFS算法题解两 ...

  4. dfs深度优先搜索_图的深度优先搜索(DFS)

    dfs深度优先搜索 Depth First Search (DFS) is an algorithm that searches a graph/tree, in a depth-wise manne ...

  5. 【蓝桥杯C/C++】专题五:DFS深度优先搜索

    专题五:DFS深度优先搜索 目录 专题五:DFS深度优先搜索 前言 什么是回溯法 如何理解回溯法 回溯法解决的问题 回溯法模板 1 .回溯函数模板返回值以及参数 2. 回溯函数终止条件 3 .回溯搜索 ...

  6. 浅谈深度学习:基于对LSTM项目`LSTM Neural Network for Time Series Prediction`的理解与回顾

    浅谈深度学习:基于对LSTM项目LSTM Neural Network for Time Series Prediction的理解与回顾#### 总包含文章: 一个完整的机器学习模型的流程 浅谈深度学 ...

  7. DFS(深度优先搜索)算法实现

    2 DFS算法 DFS(深度优先搜索)算法,搜索过程是类似于不撞南墙不回头的意思,DFS一般使用堆栈(先入后出)这种数据结构实现,由此一来,以初始起点为中心进行搜索,首先是周围点加入到堆栈中,起始点搜 ...

  8. “暴力美学1”——DFS深度优先搜索

    作为新时代青年,"暴力"二字似乎离我们十分遥远,大多数时候我们只能够在电影或者电视剧上接触这个概念 暴力二字或许是个贬义词,但若是我们在后面加上美学二字,或许就是一个值得推敲的词汇 ...

  9. 张三踩瓷砖:C++用DFS深度优先搜索解POJ1979 Red and Black问题

    POJ1979 Red and Black 题目链接: POJ1979 Red and Black 简单理解一下题目: 张三站在一个长方形的房间里,房间里铺满了方形瓷砖,瓷砖有红色和黑色两种,他站在其 ...

最新文章

  1. JAVA中获取当前系统时间
  2. 用看板工具Leangoo思维导图实现影响地图
  3. Nginx禁止指定目录运行PHP脚本
  4. Go GC 20 问
  5. cmd进入控制Mysql出现乱码的问题
  6. 小米11 Pro系列细节再曝光:大杯大升级!
  7. distributed--根索引
  8. [LeetCode] Longest Substring with At Most Two Distinct Characters 最多有两个不同字符的最长子串...
  9. CSS学习 -- 3种命名方式及规则
  10. error: src refspec main does not match any
  11. DP--POJ1191 棋盘分割
  12. Spring操作数据库几十次后就JDBC begin transaction failed
  13. 开放集识别的最新进展总结(源于Recent Advances in Open Set Recognition: A Survey)
  14. php根据经纬度获取地理位置
  15. 机房交换机网络测试软件,国内IDC机房带宽测试工具和方案
  16. Barefoot P4加速SDN
  17. 供应链金融的三种业务模式
  18. iOS安全逆向之旅---逆向基本知识概要介绍
  19. A站复兴?B站说NO
  20. 数据库发展史 特性,安装区别

热门文章

  1. 2000B题钢管订购和运输
  2. ecstore购物车结算表单Form submission canceled because the form is not connected
  3. 关于有源滤波器和无源滤波器
  4. 陈天奇:十年机器学习科研之路(附链接)
  5. gprs at指令解析 c语言,GPRS的AT指令解析
  6. Geospatial Data Science (1):Introduction and Geometric objects
  7. 中国疏水喷雾市场趋势报告、技术动态创新及市场预测
  8. 太原住宅小区型分户计费节能管理系统TKD-CAS 电力载波技术 节电效率高-节能环保
  9. 下列网站服务器位于北京的是什么,北京教育网dns服务器地址
  10. 昆仑通态物联网屏流量消耗计算