深度优先搜索(DFS: Depth First Search)

深度优先搜索是一种树的遍历方式。与此对应的是广度优先搜索

 

二叉树的优先搜索:

 

如何把一个数学问题转换为树的深度优先搜索问题:

例如:各位数之和为偶数的一个10位二进制数有几个。

我们来分析一下这个问题,首先一共有10位数,然后每一位数都只有两种状态0,1

这可以看做是一个深度为10的一个二叉树,然后用树的深度优先搜索即可解决问题。

 

用C语言实现的代码结构

void DFS(int depth)

{

    if(depth==10)        //递归出口

    {

        //do something        //对全部层进行操作

        return;

    }

    for(int i=0; i<2; i++)        //这是一个二叉树

    {

        //do something        //对该层进行操作

        DFS(depth+1);        //进入下一层

    }

}

 

完整代码

#include <iostream>

 

using namespace std;

 

int a[10]={};

int count=0;

 

void DFS(int depth)

{

    if(depth==10)

    {

        int sum=0;

        for(int i=0;i<10;i++) sum+=a[i];

        if(sum%2==0)

        {

            count++;

        }

        return;

    }

    for(int i=0;i<2;i++)

    {

        a[depth] = i;

        DFS(depth+1);

    }

}

 

int main()

{

    DFS(0);

    cout << count << endl;

    return 0;

}

猜你喜欢

转载自www.cnblogs.com/jawide/p/12053764.html