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 ob_start()控制浏览器cache、生成html实现代码
Feb 16 PHP
PHP实现的简单缓存类
Jul 29 PHP
PHP 读取大文件并显示的简单实例(推荐)
Aug 12 PHP
PHP入门教程之图像处理技巧分析
Sep 11 PHP
thinkPHP内置字符串截取函数用法详解
Nov 15 PHP
PHP在linux上执行外部命令的方法
Feb 06 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
Sep 15 PHP
PHP数组去重的更快实现方式分析
May 09 PHP
thinkPHP5.1框架中Request类四种调用方式示例
Aug 03 PHP
PHP中strval()函数实例用法
Jun 07 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生成缩略图的函数代码(修改版)
2011/01/18 PHP
joomla jce editor 解决上传中文名文件失败问题
2013/06/09 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
浅谈javascript的数据类型检测
2010/07/10 Javascript
js+html+css实现鼠标移动div实例
2013/01/30 Javascript
一个实用的图片切换支持点击切换和自动轮播
2014/09/09 Javascript
JQuery实现可直接编辑的表格
2015/04/16 Javascript
jQuery实现在列表的首行添加数据
2015/05/19 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
微信小程序switch组件使用详解
2018/01/31 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
Python学习笔记_数据排序方法
2014/05/22 Python
Python3中类、模块、错误与异常、文件的简易教程
2017/11/20 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
在Python 中同一个类两个函数间变量的调用方法
2019/01/31 Python
Python3.7 新特性之dataclass装饰器
2019/05/27 Python
python3字符串操作总结
2019/07/24 Python
详解python pandas 分组统计的方法
2019/07/30 Python
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
办公室文秘岗位职责
2013/11/15 职场文书
建筑个人求职信范文
2014/01/25 职场文书
公司委托书格式范文
2014/10/09 职场文书
出差报告怎么写
2014/11/06 职场文书
2014年维修电工工作总结
2014/11/20 职场文书
放假通知怎么写
2015/08/18 职场文书
教您:房贷工资收入证明应该怎么写?
2019/08/19 职场文书
四年级作文之植物
2019/09/20 职场文书
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang