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连接SQLServer2005 的问题解决方法
Jul 19 PHP
php利用iframe实现无刷新文件上传功能的代码
Sep 29 PHP
PHP mail()函数使用及配置方法
Jan 14 PHP
ThinkPHP跳转页success及error模板实例教程
Jul 17 PHP
php中把美国时间转为北京时间的自定义函数分享
Jul 28 PHP
PHP产生不重复随机数的5个方法总结
Nov 12 PHP
php使用Jpgraph绘制柱形图的方法
Jun 10 PHP
PHP响应post请求上传文件的方法
Dec 17 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
Nov 12 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
Aug 17 PHP
php下的原生ajax请求用法实例分析
Feb 28 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 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
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
用jQuery模拟select下拉框的简单示例代码
2014/01/26 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
JavaScript通过元素索引号删除数组中对应元素的方法
2015/03/18 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
nodejs express配置自签名https服务器的方法
2018/05/22 NodeJs
深入解读Node.js中的koa源码
2019/06/17 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
Web服务器框架 Tornado简介
2014/07/16 Python
python动态参数用法实例分析
2015/05/25 Python
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
python类中super()和__init__()的区别
2016/10/18 Python
Python使用Pickle模块进行数据保存和读取的讲解
2019/04/09 Python
Django网络框架之创建虚拟开发环境操作示例
2019/06/06 Python
Django Rest framework三种分页方式详解
2019/07/26 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
python获取百度热榜链接的实例方法
2020/08/25 Python
Python如何批量生成和调用变量
2020/11/21 Python
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
html5适合移动应用开发的12大特性
2014/03/19 HTML / CSS
医药代表个人求职信范本
2013/12/19 职场文书
小学生打架检讨书
2014/01/26 职场文书
二年级学生评语大全
2014/04/23 职场文书
《青海高原一株柳》教学反思
2014/04/25 职场文书
产品销售计划书
2014/05/04 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
房地产经营管理专业自荐信
2014/09/02 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
高中物理教学反思
2016/02/19 职场文书
导游词之青岛太清宫
2019/12/13 职场文书
详解Flask开发技巧之异常处理
2021/06/15 Python
使用jpa之动态插入与修改(重写save)
2021/11/23 Java/Android
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL
Golang jwt身份认证
2022/04/20 Golang