您的位置:首页 > 其它

深搜随想

2014-07-10 17:48 190 查看
深度搜索,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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 深搜 dfs