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 相关文章推荐
3
Oct 09 PHP
一个取得文件扩展名的函数
Oct 09 PHP
PHP排序之二维数组的按照字母排序实现代码
Aug 13 PHP
利用PHP生成静态HTML文档的原理
Oct 29 PHP
php引用返回与取消引用的详解
Jun 08 PHP
PHP设计模式之命令模式的深入解析
Jun 13 PHP
php批量更改数据库表前缀实现方法
Oct 26 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
Aug 10 PHP
Django 标签筛选的实现代码(一对多、多对多)
Sep 05 PHP
PHP的介绍以及优势详细分析
Sep 05 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
Oct 15 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 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
MySQL修改密码方法总结
2008/03/25 PHP
关于UEditor编辑器远程图片上传失败的解决办法
2012/08/31 PHP
PHP跨平台获取服务器IP地址自定义函数分享
2014/12/29 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
关于php中一些字符串总结
2016/05/05 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
PHP与Web页面的交互示例详解一
2020/08/04 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
在JavaScript中,为什么要尽可能使用局部变量?
2009/04/06 Javascript
jQuery Selector选择器小结
2010/05/06 Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
2011/12/29 Javascript
一个JavaScript变量声明的知识点
2013/10/28 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
JS中的数组转变成JSON格式字符串的方法
2017/05/09 Javascript
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
[01:02:55]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
numpy给array增加维度np.newaxis的实例
2018/11/01 Python
python判断一个数是否能被另一个整数整除的实例
2018/12/12 Python
解决安装pycharm后不能执行python脚本的问题
2019/01/19 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
2019/04/03 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
意大利领先的奢侈品在线时装零售商:MCLABELS
2020/10/13 全球购物
荷兰最大的鞋子、服装和运动折扣店:Bristol
2021/01/07 全球购物
土木工程毕业生推荐信
2013/10/28 职场文书
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
班干部演讲稿
2014/04/24 职场文书
授权委托书怎么写
2014/09/25 职场文书
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android
vue3获取当前路由地址
2022/02/18 Vue.js
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android