PHP实现深度优先搜索算法(DFS,Depth First Search)详解


Posted in PHP onSeptember 16, 2017

本文实例讲述了PHP实现深度优先搜索算法。分享给大家供大家参考,具体如下:

深度优先搜索的实现原理:

PHP实现深度优先搜索算法(DFS,Depth First Search)详解

实现代码:

<?php
class Search_Method
{
  //无向图的数组描述
  private $dfs_save;
  //全局记录数组
  private $arr;
  //控制分支-
  private $k = 0;
  public function __construct()
  {
    $this->dfs_save = array(
      array(0,1,1,1,0,0,0,0,0),
      array(1,0,0,0,1,0,0,0,0),
      array(1,0,0,0,0,1,0,0,0),
      array(1,0,0,0,0,0,1,0,0),
      array(0,1,0,0,0,1,0,0,1),
      array(0,0,1,0,1,0,0,1,0),
      array(0,0,0,1,0,0,0,0,0),
      array(0,0,0,0,0,1,0,0,0),
      array(0,0,0,0,1,0,0,0,0),
    );
    $this->arr = array();
  }
  //深度优先搜索的递归实现方法
  public function dfs($v)
  {
    //对顶点做一些操作
    echo str_repeat("-",$this->k);
    echo 'V'.($v+1).'<br>';
    //记录已访问的顶点
    $this->arr[]= $v;
    //查找与顶点相连接的顶点,如果存在就继续深度优先搜索
    for($i=0;$i<9;$i++)
    {
      if(!in_array($i,$this->arr)&&$this->dfs_save[$v][$i]==1)
      {
        $this->k++;
        $this->dfs($i);
      }
    }
    $this->k--;
    return;
  }
}
?>

实现输出结果:

V1
-V2
--V5
---V6
----V3
----V8
---V9
-V4
--V7

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php中文本数据翻页(留言本翻页)
Oct 09 PHP
多重?l件?合查?(一)
Oct 09 PHP
加速XP搜索功能堪比vista
Mar 22 PHP
解析php中session的实现原理以及大网站应用应注意的问题
Jun 17 PHP
PHP实现HTTP断点续传的方法
Jun 17 PHP
使用PHP生成二维码的方法汇总
Jul 22 PHP
php封装的连接Mysql类及用法分析
Dec 10 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
Dec 14 PHP
thinkPHP删除前弹出确认框的简单实现方法
May 16 PHP
PHP常见加密函数用法示例【crypt与md5】
Jan 27 PHP
PHP观察者模式实例分析【对比JS观察者模式】
May 22 PHP
php 的多进程操作实践案例分析
Feb 28 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 #PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
Sep 16 #PHP
PHP环形链表实现方法示例
Sep 15 #PHP
PHP实现的链式队列结构示例
Sep 15 #PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 #PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 #PHP
visual studio code 调试php方法(图文详解)
Sep 15 #PHP
You might like
php数组函数序列之array_values() 获取数组元素值的函数与方法
2011/10/30 PHP
php截取中文字符串不乱码的方法
2013/12/25 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
thinkphp模板输出技巧汇总
2014/11/24 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
超棒的javascript页面顶部卷动广告效果
2007/12/01 Javascript
js程序中美元符号$是什么
2008/06/05 Javascript
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
jquery实现多条件筛选特效代码分享
2015/08/28 Javascript
深入理解(function(){... })();
2016/08/16 Javascript
详解如何在vue中使用sass
2017/06/21 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
JavaScript面向对象程序设计创建对象的方法分析
2018/08/13 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
你应该知道的python列表去重方法
2017/01/17 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
Python识别处理照片中的条形码
2020/11/16 Python
德国帽子专家:Hutshopping
2019/11/03 全球购物
本科毕业生的求职信范文
2013/11/20 职场文书
烹调加工管理制度
2014/02/04 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
教师工作决心书
2015/02/04 职场文书
详解Redis主从复制实践
2021/05/19 Redis
Python包argparse模块常用方法
2021/06/04 Python