广度优先搜索算法(Breadth-First Search , BFS)---解决最短路径问题算法

本文主要是介绍广度优先搜索算法(Breadth-First Search , BFS)---解决最短路径问题算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:广度优先搜索可回答两类问题,

  • 从节点A触发,有前往节点B的路径吗?
  • 从节点A触发,前往节点B的哪条路径最短?
image

如上图所示,我们需要从You的关系网找到海澜,我们先从一级关系网中搜索,如果一级没有再向外扩展一圈到二级,依次类推,直到搜索所有人或者搜到目标为止。

示例代码
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;public class BreadthFirstSearchAlgorithm : MonoBehaviour
{private static Dictionary<string, string[]> graph = new Dictionary<string, string[]>();void Start(){graph.Add("You", new[] { "A0", "A1", "A2" });graph.Add("A1", new[] { "A3", "A4" });graph.Add("A0", new[] { "A4" });graph.Add("A2", new[] { "A5", "A6" });graph.Add("A3", Array.Empty<string>());graph.Add("A4", Array.Empty<string>());graph.Add("A5", Array.Empty<string>());graph.Add("A6", new[] { "A5", "海澜" });Search("You");}private static bool Search(string name){var searchQueue = new Queue<string>(graph[name]);                         //需要搜索的队列var searched = new List<string>();                                                            //已经搜索过的人物列表,防止循环引用的搜索while (searchQueue.Any())                                                                       //如果列表不为空就一直搜索{var person = searchQueue.Dequeue();if (!searched.Contains(person)){if (PersonIsHaiLan(person)){Debug.Log($"{person} 是需要找到的人");return true;}else{var newSearchQueue = searchQueue.Concat(graph[person]);  //将此人的所有直接联系人(一级)添加到待搜索的列表searchQueue = new Queue<string>(newSearchQueue);searched.Add(person);                                                               //已经搜索的人添加到列表中,防止循环引用搜索        }}}return false;}private static bool PersonIsHaiLan(string name){return name.Equals("海澜");}}

http://www.taodudu.cc/news/show-8076416.html

相关文章:

  • 广度优先搜索 Breadth-First Search
  • 广度优先搜索 Breadth First Search
  • 102.二叉树的层序遍历(广度优先遍历BFS----Breadth_First_Search)
  • 数据结构——广度优先搜索(BFS,Breadth First Search)
  • JavaScript:实现BreadthFirstSearch广度优先搜索算法(附完整源码)
  • [Tree Breadth First Search] 二叉树的层平均值
  • 广度优先搜索(breadth-first search,BFS)
  • Go:BreadthFirstSearch广度优先搜索算法(附完整源码)
  • Python-树-图-Breadth_First_Search_广度优先搜索
  • Breadth-First Search ------ 广度优先搜索算法(BFS)
  • BFS广度优先搜索(Breadth First Search)
  • [Tree Breadth First Search] 二叉树的层序遍历
  • 二Day1A - Breadth First Search
  • Breadth First Search
  • breadth first search -广度优先搜索
  • 在 Eclipse 中配置 Subversion
  • Subversion 简介
  • 在Ubuntu下编译Openoffice (3)
  • subversion操作
  • 计算两个日期之间相差的年数月数天数(JS实现)
  • JavaScript计算时间间隔(年月日时分秒)
  • 用《文心一言》1分钟写一篇博客简直yyds
  • 《曾国藩》三部曲的感慨
  • 曾国藩的中国式智慧[转]
  • 如何解决Putty报错: Can’t agree a key change algorithm
  • 记一次遇到的Redis集群报错问题——[ERR] Nodes don't agree about configuration!的解决方案
  • Redis [ERR] Nodes don’t agree about configuration!问题分析处理
  • Couldn't agree a key exchange algorithm
  • Android地图界面初始化报 not agree privacyMode, please invoke SDKInitializer.setAgreePrivacy(Context, boolea
  • 第一行代码 百度地图 报错 not agree privacyMode, please invoke SDKInitializer.setAgreePrivacy(Context, boolean)
  • 这篇关于广度优先搜索算法(Breadth-First Search , BFS)---解决最短路径问题算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



    http://www.chinasem.cn/article/292750

    相关文章

    HTML5 搜索框Search Box详解

    《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

    SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

    《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

    SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

    《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

    MySQL 设置AUTO_INCREMENT 无效的问题解决

    《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

    关于跨域无效的问题及解决(java后端方案)

    《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig

    Go语言中泄漏缓冲区的问题解决

    《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

    Java死锁问题解决方案及示例详解

    《Java死锁问题解决方案及示例详解》死锁是指两个或多个线程因争夺资源而相互等待,导致所有线程都无法继续执行的一种状态,本文给大家详细介绍了Java死锁问题解决方案详解及实践样例,需要的朋友可以参考下... 目录1、简述死锁的四个必要条件:2、死锁示例代码3、如何检测死锁?3.1 使用 jstack3.2

    解决JSONField、JsonProperty不生效的问题

    《解决JSONField、JsonProperty不生效的问题》:本文主要介绍解决JSONField、JsonProperty不生效的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录jsONField、JsonProperty不生效javascript问题排查总结JSONField

    github打不开的问题分析及解决

    《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

    MySQL版本问题导致项目无法启动问题的解决方案

    《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地