zoukankan      html  css  js  c++  java
  • 搜索算法总结

    一:广度优先搜索

    思想:

    1.在搜索树种任意选择一个节点A

    2.从该节点出发访问他的所有子节点:B,C,D...

    3.以B节点为根节点,访问它的所有子节点:T,N,M...

    4.重复3步骤,直到所有节点被访问

    解决方法:队列

    利用队列存储未访问其子节点的节点,已经访问完其子节点的从队头出来,没有访问到期子节点的从队尾进来。

    如上图a,假如选的V1为开始节点,则访问顺序依次为 V1-->V2-->V3-->V4-->V5-->V6-->V7

    V1 进队,访问V1的子节点V2,V3 。

    V2,V3进队,V1出队

    V4,V4进队,V2出队

    .....

    知道V7出队,访问完所有节点。

    广度优先搜索算法框架:

    void BRF(){

        Node *Q=NULL;

        v1入队Q;

        while(Q!=NULL){

               取Q的头元素V1;

              对V1的所有儿子节点V{

                    if(v是叶子节点) 计算最优值;

                    else{

                         if(v满足预设条件)  v入队Q;

                         else 舍去v;

                   }

                   标记V1;

              }

       }

    }

    二:深度优先搜索算法:

    思想:

    1.任选一点作为根节点a

    2.访问V1的从左向右的第一个子节点b

    3.以b为节点重复1,2步骤

    搜索过程:a-->b-->c-->f-->c-->d-->g

    解决方法:栈

    1.a进栈,b进栈,c进栈

    2.c是叶子节点了,回溯,c出栈

    3.搜索到b其他节f,f进栈,c进栈

    4.c是叶子节点,c出栈,f出栈,b出栈

    5.搜索到a的其他未访问的子节点d,d进栈,g进栈

    6.g是叶子节点,出栈,d出栈,a出栈

    7.栈为0,结束

  • 相关阅读:
    windows和linux下安装 redis
    YII1 配置redis并使用
    YII1 安装smarty模版引擎
    thinkphp5 阿里云短信 发送多参数的短信
    利用securecrt或者xshell 下载服务器端文件到本地windows系统中
    Swift 内存管理
    扩展和协议
    继承
    构造与析构
    方法
  • 原文地址:https://www.cnblogs.com/aijianiula/p/2508979.html
Copyright © 2011-2022 走看看