深搜随想

来源:互联网 发布:fpga 保存数据 编辑:程序博客网 时间:2024/05/09 17:04

深度搜索,Deep First Search,专门用来解决跟图啊、树啊相关的问题。而,作为一个大三结束的学生,没有一次当课上老师讲解完深搜后,能觉得自己会了。貌似记忆中,讲到深搜的机会不止十次,也不是同一个老师在讲,而每一次,基本上对深搜的讲解都是一样一样的,真不知道这些老师是不是事先“串通”好了。


现在暑假,一次偶然逛jd的时候,看到一本书《啊哈算法》。因为本身算法基础不好,而这本书又是一本入门的书籍,所以就买了下来。第二天,书到手了,稍微翻一下,确实跟买书前看到的评论一样:特别浅,特别适合初学者(好吧,我已经学了三年编程,结果算法我还是个初学,顶!)。


看完之后,对深搜确实理解比较深。书中说到,深搜其实只有三步:

一、边界值或临界值检查,记得return;

二、每一次深搜都要进行的步骤(比如走迷宫,每一次深搜,都要对四个方向进行判断);

三、dfs(next step)和return;


下面贴出一个实例,以供理解

#include <stdio.h>#include <stdlib.h>int a[9], book[10], total = 0, n;void dfs(int step){if (step == n + 1){if (a[0] * 100 + a[1] * 10 + a[2] + a[3] * 100 + a[4] * 10 + a[5] == a[6] * 100 + a[7] * 10 + a[8]){total++;printf("%d + %d = %d\n", (a[0] * 100 + a[1] * 10 + a[2]), (a[3] * 100 + a[4] * 10 + a[5]), (a[6] * 100 + a[7] * 10 + a[8]));return;}}for (int i = 0; i < 10; i++){if (book[i] == 0){a[step] = i;book[i] = 1;dfs(step + 1);book[i] = 0;}}return;}int main(){for (int i = 0; i < 10; i++){a[i] = 0;book[i] = 0;}n = 9;dfs(1);printf("total=%d\n", total/2);system("pause");return 0;}


0 0
原创粉丝点击