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 接口类与抽象类的实际作用
Nov 26 PHP
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
Jun 05 PHP
php中apc缓存使用示例
Dec 25 PHP
php自定义session示例分享
Apr 22 PHP
php分页示例分享
Apr 30 PHP
php从memcache读取数据再批量写入mysql的方法
Dec 29 PHP
整理php防注入和XSS攻击通用过滤
Sep 13 PHP
详解YII关联查询
Jan 10 PHP
php 字符串中是否包含指定字符串的多种方法
Apr 12 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
Feb 12 PHP
tp5修改(实现即点即改)
Oct 18 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 iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
2017/09/15 PHP
JavaScript 序列化对象实现代码
2009/12/18 Javascript
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
基于jquery的商品展示放大镜
2010/08/07 Javascript
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
引用其它js时如何同时处理多个window.onload事件
2014/09/02 Javascript
js实现上传图片预览的方法
2015/02/09 Javascript
javascript数组去重的六种方法汇总
2015/08/16 Javascript
JavaScript转换与解析JSON方法实例详解
2015/11/24 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
Chrome调试折腾记之JS断点调试技巧
2017/09/11 Javascript
jquery学习笔记之无new构建详解
2017/12/07 jQuery
微信小程序中为什么使用var that=this
2019/08/27 Javascript
javascript 高级语法之继承的基本使用方法示例
2019/11/11 Javascript
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
Python编程实现的简单Web服务器示例
2017/06/22 Python
Python中read()、readline()和readlines()三者间的区别和用法
2017/07/30 Python
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
windows 下python+numpy安装实用教程
2017/12/23 Python
Django中Model的使用方法教程
2018/03/07 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
Python生成器常见问题及解决方案
2020/03/21 Python
大三学年自我鉴定范文(3篇)
2014/09/28 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
信用卡工作证明范本
2015/06/19 职场文书
我的中国梦主题班会
2015/08/14 职场文书
MySQL数据库必备之条件查询语句
2021/10/15 MySQL
MySQL多表查询机制
2022/03/17 MySQL
MySQL数据库之存储过程 procedure
2022/06/16 MySQL
利用Python实时获取steam特惠游戏数据
2022/06/25 Python
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS