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 相关文章推荐
php 清除网页病毒的方法
Dec 05 PHP
用PHP实现读取和编写XML DOM代码
Apr 07 PHP
解析smarty模板中类似for的功能实现
Jun 18 PHP
ecshop实现smtp发送邮件
Feb 03 PHP
windows下安装php的memcache模块的方法
Apr 07 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
Jun 28 PHP
Yii2中DropDownList简单用法示例
Jul 18 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
May 13 PHP
安装docker和docker-compose实例详解
Jul 30 PHP
thinkPHP事务操作简单案例分析
Oct 17 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 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
php中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
浅析关于PHP位运算的简单权限设计
2013/06/30 PHP
PHP 7.0.2 正式版发布
2016/01/08 PHP
一种JavaScript的设计模式
2006/11/22 Javascript
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
js操作select控件的几种方法
2010/06/02 Javascript
javascript new fun的执行过程
2010/08/05 Javascript
url地址自动加#号问题说明
2010/08/21 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
js实现HashTable(哈希表)的实例分析
2016/11/21 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
Angular实现较为复杂的表格过滤,删除功能示例
2017/12/23 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
vue前后分离调起微信支付
2019/07/29 Javascript
js实现自定义滚动条的示例
2020/10/27 Javascript
Python实现的Excel文件读写类
2015/07/30 Python
在pycharm中使用git版本管理以及同步github的方法
2019/01/16 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
有原因的手表:Flex Watches
2019/03/23 全球购物
澳大利亚床上用品、浴巾和家居用品购物网站:Bambury
2020/04/16 全球购物
J2EE面试题
2016/03/14 面试题
大学生收银员求职信分享
2014/01/02 职场文书
先进个人事迹材料
2014/01/25 职场文书
师范生自荐信模板
2014/05/28 职场文书
交警作风整顿剖析材料
2014/10/11 职场文书
钱塘江大潮导游词
2015/02/03 职场文书
黑白记忆观后感
2015/06/18 职场文书