zoukankan      html  css  js  c++  java
  • 广度优先搜索

    参考资料:https://www.jianshu.com/p/881fab02c5ec

    概念:

    广度优先搜索算法(Breadth-First Search,BFS)是一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。BFS并不使用经验法则算法

    二、例子
    假设你经营着一个芒果农场,需要寻找芒果销售商,以便将芒果卖给他。在Facebook,你与芒果销售商有联系吗?为此,你可在朋友中查找

    这种查找很简单。首先,创建一个朋友名单。

     

     然后,依次检查名单中的每个人,看看他是否是芒果销售商。

     

     假设你没有朋友是芒果销售商,那么你就必须在朋友的朋友中查找。

     

     检查名单中的每个人时,你都将其朋友加入名单。

     这样一来,你不仅在朋友中查找,还在朋友的朋友中查找。别忘了,你的目标是在你的人际关系网中找到一位芒果销售商。因此,如果Alice不是芒果销售商,就将其朋友也加入到名单中。这意味着你将在她的朋友、朋友的朋友等中查找。使用这种算法将搜遍你的整个人际关系网,直到找到芒果销售商。这就是广度优先搜索算法。

     代码:

    <?php
    
    class Search {
        public function test($arrs) {
            foreach ($arrs as $arr) {
                $queue = $arr;
                $tag = false;
                while (!empty($queue)) {
                    $person = array_shift($queue);  //取一个节点
                    $searched = []; //标记已经访问过的节点
                    if (in_array($person, $searched)) continue; //避免重复查找
                    $searched[] = $searched;
                    if ($this->person_is_seller($person)) {     //是否为芒果经销商
                        echo 'person ' . $person;
                        $tag = true;
                    } else {
                        $queue = array_merge($queue, $arrs["$person"]); //将朋友的朋友放入到队列中
                    }
                }
                if ($tag) {
                    return;
                }
            }
        }
    
        public function person_is_seller($name) {
            return strpos($name, 'm');
        }
    }
    
    $arr = [
        'you' => ["alice", "bob", "claire"],
        'bob' => ["anuj", "peggy"],
        'alice' => ["peggy"],
        'claire' => ["tho", "jonny"],
        'peggy' => [],
        'anuj' => ['nm'],
        'thom' => [],
        'jonny' => []
    ];
    
    $target = new Search();
    $target->test($arr);
  • 相关阅读:
    MyBatis框架浅析之 缓存
    MyBatis框架浅析之 Mapper.xml 映射文件
    MyBatis框架浅析之 XML配置文件
    MySQL安装
    C语言内存分配
    二叉树性质
    pycharm使用anaconda的python环境
    linux删除文件夹、文件名字转码、java转码、json字符报错、查看当前系统编码、传代码至git
    java 性能优化
    java 建maplist放case center合并
  • 原文地址:https://www.cnblogs.com/8013-cmf/p/12517851.html
Copyright © 2011-2022 走看看