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 项目的方法
Jan 02 PHP
URL Rewrite的设置方法
Jan 02 PHP
Linux下ZendOptimizer的安装与配置方法
Apr 12 PHP
php 图像函数大举例(非原创)
Jun 20 PHP
php配置php-fpm启动参数及配置详解
Nov 04 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
Oct 23 PHP
浅谈COOKIE和SESSION区别
Jul 19 PHP
Yii CGridView用法实例详解
Jul 12 PHP
PHP基于ORM方式操作MySQL数据库实例
Jun 21 PHP
Thinkphp5行为使用方法汇总
Dec 21 PHP
PHP实现断点续传乱序合并文件的方法
Sep 06 PHP
Yii 实现数据加密和解密
Mar 09 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
ThinkPHP的URL重写问题
2014/06/22 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
jquery实现树形二级菜单实例代码
2013/11/20 Javascript
jQuery Masonry瀑布流插件使用详解
2014/11/17 Javascript
js实现格式化金额,字符,时间的方法
2015/02/26 Javascript
js操作cookie保存浏览记录的方法
2015/12/25 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
2017/03/15 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
2019/02/01 Javascript
JavaScript 替换所有匹配内容及正则替换方法
2020/02/12 Javascript
基于JavaScript实现留言板功能
2020/03/16 Javascript
js验证账户名是否重复
2020/05/26 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
[03:17]2014DOTA2 国际邀请赛中国区预选赛 四强专访
2014/05/23 DOTA
如何在Python中编写并发程序
2016/02/27 Python
Django 实现购物车功能的示例代码
2018/10/08 Python
python实现从pdf文件中提取文本,并自动翻译的方法
2018/11/28 Python
python利用插值法对折线进行平滑曲线处理
2018/12/25 Python
对Python的交互模式和直接运行.py文件的区别详解
2019/06/29 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
佳能英国官方网站:Canon UK
2017/08/08 全球购物
幼师专业毕业生自荐信
2013/09/29 职场文书
质检部部长职责
2013/12/16 职场文书
期末考试动员演讲稿
2014/01/10 职场文书
建设工地安全标语
2014/06/07 职场文书
毕业生面试求职信
2014/06/23 职场文书
优秀毕业生找工作自荐信
2014/06/23 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
会议简讯范文
2015/07/20 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书