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 使用post,get的一种简洁方式
Apr 25 PHP
PHP入门经历和学习过程分享
Apr 11 PHP
php无限分类使用concat如何实现
Nov 05 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
Dec 14 PHP
Joomla语言翻译类Jtext用法分析
May 05 PHP
php5.3后静态绑定用法详解
Nov 11 PHP
thinkPHP引入类的方法详解
Dec 08 PHP
php preg_match的匹配不同国家语言实例
Dec 29 PHP
PHP获取文本框、密码域、按钮的值实例代码
Apr 19 PHP
Laravel5.1框架注册中间件的三种场景详解
Jul 09 PHP
Laravel数据库读写分离配置的方法
Oct 13 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中神奇的fastcgi_finish_request
2011/05/02 PHP
PHP中使用sleep函数实现定时任务实例分享
2014/08/21 PHP
eval的两组性能测试数据
2012/08/17 Javascript
js中function()使用方法
2013/12/24 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
js对象的复制继承实例
2015/01/10 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
2016/11/22 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
2016/12/24 Javascript
jquery实现轮播图效果
2017/02/13 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
详解html-webpack-plugin用法全解
2018/01/22 Javascript
浅谈Vue项目骨架屏注入实践
2019/08/05 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
简单介绍Python中的readline()方法的使用
2015/05/24 Python
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
2018/12/17 Python
pytorch 更改预训练模型网络结构的方法
2019/08/19 Python
在django中自定义字段Field详解
2019/12/03 Python
python集合删除多种方法详解
2020/02/10 Python
浅析NumPy 切片和索引
2020/09/02 Python
CSS3控制HTML元素动画效果
2014/02/08 HTML / CSS
CSS3实现各种图形的示例代码
2016/10/19 HTML / CSS
秋季开学典礼主持词
2014/03/19 职场文书
廉洁家庭事迹材料
2014/05/15 职场文书
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
个人四风问题整改措施思想汇报
2014/10/04 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
《确定位置》教学反思
2016/02/18 职场文书
《初涉尘世》读后感3篇
2020/01/10 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android