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 5.5 创建和验证哈希最简单的方法详解
Nov 07 PHP
关于JSON以及JSON在PHP中的应用技巧
Nov 27 PHP
php分割合并两个字符串的函数实例
Jun 19 PHP
php实现编辑和保存文件的方法
Jul 20 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
Nov 09 PHP
PHP中PDO的事务处理分析
Apr 07 PHP
Yii2 rbac权限控制之rule教程详解
Jun 23 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
Sep 26 PHP
PHP接口继承及接口多继承原理与实现方法详解
Oct 18 PHP
PHP实现的二分查找算法实例分析
Dec 19 PHP
PHP用swoole+websocket和redis实现web一对一聊天
Nov 05 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扩展函数
2006/10/09 PHP
站长助手-网站web在线管理程序 v1.0 下载
2007/05/12 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
windows7下安装php的php-ssh2扩展教程
2014/07/04 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
在laravel中实现事务回滚的方法
2019/10/10 PHP
Chrome中JSON.parse的特殊实现
2011/01/12 Javascript
JavaScript操纵窗口的方法小结
2013/06/28 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
Angular4如何自定义首屏的加载动画详解
2017/07/26 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
基于Python实现的扫雷游戏实例代码
2014/08/01 Python
利用Psyco提升Python运行速度
2014/12/24 Python
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
python删除列表内容
2015/08/04 Python
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
pyshp创建shp点文件的方法
2018/12/31 Python
Python的垃圾回收机制详解
2019/08/28 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
Python用来做Web开发的优势有哪些
2020/08/05 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
介绍一下OSI七层模型
2012/07/03 面试题
办公室保洁员岗位职责
2013/12/02 职场文书
业务总经理岗位职责
2014/02/03 职场文书
学雷锋活动总结范文
2014/04/25 职场文书
英文推荐信格式范文
2014/05/09 职场文书
运动会致辞稿
2015/07/29 职场文书