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
PHP程序员编程注意事项
Apr 10 PHP
PHP XML数据解析代码
May 26 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 PHP
php中global和$GLOBALS[]的分析之一
Feb 02 PHP
深入PHP获取随机数字和字母的方法详解
Jun 06 PHP
解析:使用php mongodb扩展时 需要注意的事项
Jun 18 PHP
php面向对象中static静态属性与方法的内存位置分析
Feb 08 PHP
PHP使用in_array函数检查数组中是否存在某个值
Mar 25 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
Jul 27 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
Aug 11 PHP
关于PHP求解三数之和问题详析
Nov 09 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
深入Apache与Nginx的优缺点比较详解
2013/06/17 PHP
php读取图片内容并输出到浏览器的实现代码
2013/08/08 PHP
php多维数组去掉重复值示例分享
2014/03/02 PHP
PHP远程采集图片详细教程
2014/07/01 PHP
php中try catch捕获异常实例详解
2014/11/21 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
PHP+MySQL实现模糊查询员工信息功能示例
2018/06/01 PHP
extJs 常用到的增,删,改,查操作代码
2009/12/28 Javascript
jquery 实现窗口的最大化不论什么情况
2013/09/03 Javascript
javascript常用对话框小集
2013/09/13 Javascript
JavaScript中switch判断容易犯错的一个细节
2014/08/27 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
js创建对象的方式总结
2015/01/10 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
2017/01/17 Javascript
简单实现js选项卡切换效果
2017/02/09 Javascript
BootStrap 动态表单效果
2017/06/02 Javascript
jQuery 查找元素操作实例小结
2019/10/02 jQuery
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
Python编程语言的35个与众不同之处(语言特征和使用技巧)
2014/07/07 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
2019/07/26 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
2020/02/28 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
python 用pandas实现数据透视表功能
2020/12/21 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
HTML5 video播放器全屏(fullScreen)方法实例
2015/04/24 HTML / CSS
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
为什么需要版本控制
2016/10/28 面试题
充分就业社区汇报材料
2014/05/07 职场文书
党员干部批评与自我批评反四风思想汇报
2014/09/21 职场文书
2014年团支书工作总结
2014/11/14 职场文书
2019个人年度目标制定攻略!
2019/07/12 职场文书
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
用JS创建一个录屏功能
2021/11/11 Javascript