深度优先搜索 : 理解的关键在于解决“当下该如何做”。至于“下一步该如何做”则与“当下该如何做”是一样的

问题 : 求出123的全排列

  • 123   132   213   231   312   321

这里我们可以用一个a数组去存放要排列的数组, 再用一个book数组去标记哪些数已经被使用了 .

代码如下 : 

#include <stdio.h>
#include <stdlib.h>
//在全局变量中,数组默认为0
int a[5], book[5], n = 3;
void Dfs(int step)
{int i;//当数组a存放了1-3所有元素且每个数都是被标记过的,证明该序列满足if (step == n + 1){for (i = 1; i <= n; i++)printf("%d", a[i]);printf("\n");return;}for (i = 1; i <= n; i++){//判断该位置是否被标记过if (book[i] == 0){//将i存入到数组的第step的位置中a[step] = i;//标记i位置证明i已经存入到a数组当中book[i] = 1;//更新step继续执行循环Dfs(step + 1);//将刚标记的位置收回,执行下一次尝试book[i] = 0;}}return;
}
int main()
{//首先从第一个数字开始Dfs(1);system("pause");return 0;
}

类似问题 : 现在你手中有编号1-9的九张扑克牌, 然后将这九张扑克牌放到九个盒子中, 并使得□□□ + □□□ = □□□ 成立

#include <stdio.h>
#include <stdlib.h>
//在全局变量中,数组默认为0
int a[10], book[10], n = 9,num = 0;
void Dfs(int step)
{int i;//当数组a存放了1-9所有元素且每个数都是被标记过的,证明该序列满足if (step == n + 1){if (a[1] * 100 + a[2] * 10 + a[3] + a[4] * 100 + a[5] * 10 + a[6]== a[7] * 100 + a[8] * 10 + a[9]) {num++;printf("%d%d%d + %d%d%d = %d%d%d", a[1], a[2], a[3],a[4], a[5], a[6], a[7], a[8], a[9]);printf("\n");return;}}for (i = 1; i <= n; i++){//判断该位置是否被标记过if (book[i] == 0){//将i存入到数组的第step的位置中a[step] = i;//标记i位置证明i已经存入到a数组当中book[i] = 1;//更新step继续执行循环Dfs(step + 1);//将刚标记的位置收回,执行下一次尝试book[i] = 0;}}return;
}
int main()
{//首先从第一个数字开始Dfs(1);//num要除二是因为718 + 236 = 954 和 236 + 718 = 945是同一种可能printf("一共有%d可能!\n", num / 2);system("pause");return 0;
}

调试如下 :

啊哈 , 算法 !--深度优先搜索( C语言版 )相关推荐

  1. 深度优先搜索c语言详解,深度优先搜索 — C语言版

    思路:找一个入口结点,然后搜索该结点的第一个相邻结点,再搜索该相邻结点的第一个相邻结点,依次往下寻找 - - ,直到所有结点都被遍历到,算法结束,退出. #include #define MAX 10 ...

  2. 数据结构深度优先搜索c语言,C语言数据结构与算法之深度、广度优先搜索

    一.深度优先搜索(Depth-First-Search 简称:DFS) 1.1 遍历过程: (1)从图中某个顶点v出发,访问v. (2)找出刚才第一个被顶点访问的邻接点.访问该顶点.以这个顶点为新的顶 ...

  3. (算法)深度优先搜索

    深度优先搜索 概述 [一条路走到底,不撞南墙不回头] [撞南墙]有两种情况:①遇到了边界条件,②遇到了已经走过的路 深度优先的另一种结束条件,就是找到了目标出口 深度优先遍历的本质就是穷举 常见的深度 ...

  4. 无向图的深度优先搜索(最终版)

    [实验内容] 设无向图G有n个点e条边,写意算法建立G的邻接多表,并按照深度优先搜索输出顶点,要求该算法时间复杂性为O(n+e),且除邻接多表本身所占空间之外只用O(1)辅助空间. [参考方法] 邻接 ...

  5. 基础算法·深度优先搜索

    祝食用愉快XD 题目链接 (是一道胡乱出的题) U56815 来走迷宫鸭! 解题思路 深度优先搜索,如果能不碰墙地到达右下角的出口,就把旗子立起来表示找到了出口. 什么?你没听过深度优先搜索 没事,且 ...

  6. 银行家算法实验报告c语言版,银行家算法实验报告C语言版.doc

    <操作系统>课程综合性实验报告 姓名: 学号: 2016 年 11 月 20 日 实验题目进程调度算法程序设计一.实验目的 通过对安全性算法和银行家算法的模拟,进一步理解资源分配的基本概念 ...

  7. 算法与数据结构c语言版PPT,C语言算法与数据结构.ppt

    C语言算法与数据结构.ppt 第十二章 算法与数据结构12.1 算法的基本概念,该节知识点所占试题比重为12,属于重点考查对象,基本上每次必考,主要考查算法的定义和对算法复杂度的理解.历次试题分值在0 ...

  8. 经典排序算法之基数排序(C语言版)

    排序算法之基数排序的C语言实现. #include "math.h" #include "stdio.h"/* * 基数排序 2016-04-18 23:43: ...

  9. 二叉树的深度优先搜索c语言,C语言 二叉树按层打印、深度优先遍历、二叉树是否对称...

    #include//二叉树节点 typedef struct tree{ int data; struct tree *pLeft; struct tree *pRight; }Tree; //队列 ...

最新文章

  1. Nginx HTTPS功能部署实践
  2. 用Delphi编写ASP的ActiveX
  3. 减治法在查找算法中的应用(JAVA)--二叉查找树的查找、插入、删除
  4. AD20如何用图片做丝印的图案,丝印层导入logo
  5. 使用反射复制一个JavaBean的对象
  6. 混淆矩阵评价指标_机器学习模型评价指标 -- 混淆矩阵
  7. mysql 参数化分页_LR12 DataWizard从Mysql数据取参数化数据
  8. 微信小程序视图层WXML_小程序事件
  9. Windows 10 自带那么多图标,去哪里找呢?
  10. 职称计算机 将计算机broad_1下的e盘映射为k盘网络驱动器,职称计算机考试(网络基础)试题及答案操作..doc...
  11. HTML-特效代码大全
  12. SSD模型物体检测(水下生物识别)
  13. 石川 :学术界、管理人、投资者视角下的因子投资
  14. 公积金约定提取周期如何更改(不跑线下实体店,可以直接在个人公积金网站自助办理)
  15. 二维码20项应用模式大盘点
  16. IDEA全局搜索快捷键(ctrl+shift+F)失效修复
  17. 图像质量评估(2) -- 图像质量相关参数:分辨率
  18. 张小龙在2017微信公开课PRO版讲了什么(附演讲实录和2016微信数据报告)
  19. 2023最新整理,Android车载操作系统开发揭秘,无偿分享!
  20. 【北京-永丰基地】这7家公司很不错,推荐给你

热门文章

  1. 851961-99-4,(2-pyridyldithio)-PEG4-alcohol含有吡啶基二硫化物部分和醇基的PEG连接剂
  2. 国内部分视频剪辑软件使用总结
  3. [转]抽象基类与接口,共性与个性的选择!
  4. 判断天干,地支,生肖推算
  5. 学术之声 | 专访邵俊教授:区块链用技术保证在链上说话算话
  6. QQ收藏支持HTML,手机qq收藏夹的内容怎么复制
  7. 十大运动蓝牙耳机品牌排行榜,六款值得买的运动耳机推荐
  8. ES5-ES6-ES7_字符串与JOSN格式的数据相互转换以及深度克隆新对象
  9. Java支持latex,基于Java和LaTeX的文档自动生成技术研究
  10. Kali linux渗透测试系列————29、Kali linux 渗透攻击之无线网络攻击