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 相关文章推荐
一个简易需要注册的留言版程序
Oct 09 PHP
解决控件遮挡问题:关于有窗口元素和无窗口元素
Jan 28 PHP
PHP ajax 分页类代码
Nov 13 PHP
php中计算未知长度的字符串哪个字符出现的次数最多的代码
Aug 14 PHP
php按单词截取字符串的方法
Apr 07 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
Dec 14 PHP
php 流程控制switch的简单实例
Jun 07 PHP
Yii2.0表关联查询实例分析
Jul 18 PHP
PHP处理bmp格式图片的方法分析
Jul 04 PHP
PHP hebrev()函数用法讲解
Feb 21 PHP
ThinkPHP5.1验证码功能实现的示例代码
Jun 08 PHP
PHP isset()及empty()用法区别详解
Aug 29 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
人大复印资料处理程序_补充篇
2006/10/09 PHP
php错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
Save a File Using a File Save Dialog Box
2007/06/18 Javascript
利用JQuery和Servlet实现跨域提交请求示例分享
2014/02/12 Javascript
使用pjax实现无刷新更改页面url
2015/02/05 Javascript
js实现的二级横向菜单条实例
2015/08/22 Javascript
高效的jquery数字滚动特效
2015/12/17 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
2016/03/07 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
jquery实现网页定位导航
2016/08/23 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
2016/11/18 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
python实现在windows下操作word的方法
2015/04/28 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
解决Python3.5+OpenCV3.2读取图像的问题
2018/12/05 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
Python之Class&amp;Object用法详解
2019/12/25 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
Python 去除字符串中指定字符串
2020/03/05 Python
数据库笔试题
2013/05/09 面试题
Oracle中delete,truncate和drop的区别
2016/05/05 面试题
统计员岗位职责
2013/11/14 职场文书
行政总监岗位职责
2013/12/05 职场文书
社团成立邀请函
2014/01/08 职场文书
医院总经理岗位职责
2014/02/04 职场文书
民主生活会对照检查材料范文
2014/10/01 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
外出考察学习心得体会
2016/01/18 职场文书
PHP判断是否是json字符串
2021/04/01 PHP
Java异常处理try catch的基本用法
2021/12/06 Java/Android