PHP实现广度优先搜索算法(BFS,Broad First Search)详解


Posted in PHP onSeptember 16, 2017

本文实例讲述了PHP实现广度优先搜索算法。分享给大家供大家参考,具体如下:

广度优先搜索的算法思想 Breadth-FirstTraversal

广度优先遍历是连通图的一种遍历策略。因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域,故得名。

广度优先搜索遍历类似于树的按层次遍历。对于无向连通图,广度优先搜索是从图的某个顶点v0出发,在访问v0之后,依次搜索访问v0的各个未被访问过的邻接点w1,w2,…。然后顺序搜索访问w1的各未被访问过的邻接点,w2的各未被访问过的邻接点,…。即从v0开始,由近至远,按层次依次访问与v0有路径相通且路径长度分别为1,2,…的顶点,直至连通图中所有顶点都被访问一次。

只要按一定的次序访问各层顶点,方便程序实现,广度优先搜索的整体层次顺序一定,各层访问顺序不是唯一的。

具体描述如下:

设图G的初态是所有顶点均未访问,在G 中任选一顶点i作为初始点,则广度优先搜索的基本思想是:

(1)从图中的某个顶点V出发访问并记录。
(2)依次访问V的所有邻接顶点;
(3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到。
(4)第(3)步。

依此类推,直到图中所有顶点都被访问完为止 。

广度优先搜索在搜索访问一层时,需要记住已被访问的顶点,以便在访问下层顶点时,从已被访问的顶点出发搜索访问其邻接点。所以在广度优先搜索中需要设置一个队列Queue,使已被访问的顶点顺序由队尾进入队列。在搜索访问下层顶点时,先从队首取出一个已被访问的上层顶点,再从该顶点出发搜索访问它的各个邻接点。

SearchInterface.php:

<?php
abstract class SearchInterface
{
  protected $G;//图
  protected $s;//图的首节点
  function __construct($_G,$_s){$this->G = $_G;$this->s = $_s;}
  public abstract function search();
}
?>

bfs.php:

<?php
include_once('SearchInterface.php');
class bfs extends SearchInterface
{
  private $d = array();//源点s和顶点u之间的距离
  private $tt = array();//结点u的父母存于变量
  private $visit = array();//已访问节点
  function __construct($_G,$_s)
  {
    parent::__construct($_G,$_s);
    //初始化$d/$tt,初始值为无穷大/NULL
    for($i=0;$i<9;$i++)
    {
      $this->d[$i] = 20000;
      $this->tt[$i] = NULL;
      $this->visit[$i] = 0;
    }
  }
  public function search()
  {
    //访问所有节点
    $queue = array();
    for($i=0;$i<9;$i++)
    {
      if($this->visit[$i]==0)
      {
        array_push($queue,$i);
        while(!empty($queue))
        {
          $_s = array_shift($queue);
          $this->visit[$_s] = 1;
          echo ($_s+1).'<br>';
          $link_s = $this->G->get_links($_s);
          //获取和s直接相连的顶点u
          foreach($link_s as $j => $u)
          {
            if($this->visit[$u]==0)
            {
              array_push($queue,$u);
              $this->visit[$u] = 2;
            }
          }
        }
      }
    }
  }
}
?>

使用方法:

$G = new Graphic;
$search = new bfs($G,1);
$search->search();

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
复杂检索数据并分页显示的处理方法
Oct 09 PHP
php MYSQL 数据备份类
Jun 19 PHP
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
Aug 07 PHP
php 获取本机外网/公网IP的代码
May 09 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
Dec 29 PHP
PHP SPL使用方法和他的威力
Nov 12 PHP
php防止SQL注入详解及防范
Nov 12 PHP
PHP使用flock实现文件加锁的方法
Jul 01 PHP
利用PHP自动生成印有用户信息的名片
Aug 01 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
Jan 24 PHP
Laravel框架生命周期与原理分析
Jun 12 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 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
PHP简单实现模拟登陆功能示例
Sep 15 #PHP
You might like
国王的咖啡这么大来头,名字的由来是什么
2021/03/03 咖啡文化
PHP实现多条件查询实例代码
2010/07/17 PHP
linux下为php添加curl扩展的方法
2011/07/29 PHP
PHP is_subclass_of函数的一个BUG和解决方法
2014/06/01 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
AES加解密在php接口请求过程中的应用示例
2016/10/26 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
JavaScript简介
2015/02/15 Javascript
剖析Node.js异步编程中的回调与代码设计模式
2016/02/16 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
JavaScript来实现打开链接页面的简单实例
2016/06/02 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
详解Angular-cli生成组件修改css成less或sass的实例
2017/07/27 Javascript
详解JavaScript按概率随机生成事件
2017/08/02 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
JavaScript屏蔽Backspace键的实现代码
2017/11/02 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
JS如何把字符串转换成json
2020/02/21 Javascript
python使用插值法画出平滑曲线
2018/12/15 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
python中调试或排错的五种方法示例
2019/09/12 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
2019/12/02 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
使用python实现多维数据降维操作
2020/02/24 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
CSS3选择器新增问题的实现
2021/01/21 HTML / CSS
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
FirstCry阿联酋儿童和婴儿产品网上购物:FirstCry.ae
2021/02/22 全球购物
建筑工程专业学生的自我评价
2013/12/25 职场文书
商场拾金不昧表扬信
2014/01/13 职场文书
环保倡议书300字
2014/05/15 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书