BFS java实现

2023-11-13


public class BFS {
    //存放节点关系的hashtable
    public static void bfs(HashMap<Character, LinkedList<Character>> graph, HashMap<Character, Integer> dist, Character s) {
        //建立队列
        Queue<Character> q = new LinkedList<>();
        //给定起始节点
        Character start = s;
        //起始节点放到距离表中
        dist.put(start, 0);
        ((LinkedList<Character>) q).add(start);
        //遍历,一定要取出栈顶节点再加入
        while (q != null) {
            //取出栈顶节点和栈顶节点到起始节点的距离
            Character poll = q.poll();
            if(poll == null){
                break;
            }
            Integer distance = dist.get(poll);
            System.out.println("节点" + poll + "到起始节点" + start + "的距离为" + distance);
            distance++;
            //将邻接节点加入
            for (Character c : graph.get(poll)) {
                //如果没遍历过这个节点,加入到队列和距离表中
                if (!dist.containsKey(c)) {
                    dist.put(c, distance);
                    q.offer(c);
                }
            }
        }

    }
}

public class BTS_test {
    public static void main(String[] args) {
        HashMap<Character, LinkedList<Character>> graph = new HashMap<>();
        HashMap<Character, Integer> dist = new HashMap<>();

        // s顶点的邻接表

        LinkedList<Character> list_s = new LinkedList<Character>();

        list_s.add('A');

        list_s.add('B');

        LinkedList<Character> list_a = new LinkedList<Character>();

        list_a.add('C');

        list_a.add('D');

        LinkedList<Character> list_b = new LinkedList<Character>();

        list_b.add('D');

        list_b.add('E');

        LinkedList<Character> list_c = new LinkedList<Character>();

        list_c.add('E');

        LinkedList<Character> list_d = new LinkedList<Character>();

        list_c.add('E');


        //构造图

        graph.put('S', list_s);

        graph.put('A', list_a);

        graph.put('B', list_b);

        graph.put('C', list_c);

        graph.put('D', list_d);

        graph.put('E', new LinkedList<Character>());


        //调用

       BFS.bfs(graph, dist, 'S');

    }


}

结果:

节点S到起始节点S的距离为0
节点A到起始节点S的距离为1
节点B到起始节点S的距离为1
节点C到起始节点S的距离为2
节点D到起始节点S的距离为2
节点E到起始节点S的距离为2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BFS java实现 的相关文章

  • 贪心算法-背包问题C++

    1 问题 给定n种物品和一个背包 物品i的重量是Wi 其价值为Vi 背包的容量为C 应如何选择装入背包的物品 使得装入背包中物品的总价值最大 2 算法解析 此算法的贪心策略在于Sort排序函数 背包问题与0 1背包问题不同在于背包问题可以将
  • 【EI核心检索】第六届算法、计算与系统国际会议(ICACS 2022)

    会议官网 http icacs org 会议时间 2022年9月16 18日 主办单位 希腊色萨利大学数字系统学院 学术支持单位 英国斯特拉斯克莱德大学 会议地点 线上线下 希腊色萨利大学 会议出版 ACM会议论文集 会议收录 Ei Com
  • 单件模式:确保一个类只有一个实例,并提供一个全局访问点。

    问题 一个类只有一个实例的用处 线程池 缓存 对话框 处理偏好设置以及注册表等 全局变量的缺点 1 程序一开始就要创建好对象 一直未使用的话 就会浪费资源 2 全局变量只能约定只有一个实例 但是如果new新的实例 也是可以办到的 1 单件模
  • 最全面的Python重点知识汇总,建议收藏!

    这是一份来自于 SegmentFault 上的开发者 二十一 总结的 Python 重点 由于总结了太多的东西 所以篇幅有点长 这也是作者 缝缝补补 总结了好久的东西 Py2 VS Py3 print成为了函数 python2是关键字 不再
  • [DNN]CNN的结构分析和参数量计算

    文章目录 1 概述 1 1参数量计算方法 1 2神经元数量计算 1 3 连接数量计算 FLPOS 2 LeNet5结构和参数量计算 2 1 结构 2 2 对应的参数量计算 2 3 连接数量 FLOPS 资料来源 LeNet5分析 CNN参数
  • Mybatis-plus使用wrapper实现分页查询

    pom xml
  • 数据分级分类实施指南_逆袭!对数据分类分级治理快速提高企业数据管理水平...

    点击蓝色字免费订阅 每天收到这样的好信息 一 数据治理与数据分类分级 DAMA 数据管理知识体系指南 给出的定义 数据治理是对数据资产管理行使权力和控制的活动集合 规划 监控和执行 数据治理的职能是指导其他数据管理职能如何执行 数据治理就是
  • TeX Live for windows 安装及更新

    下载 install tl windows exe 或者install tl zip压缩包 解压之后右键以管理员身份运行install tl advanced bat 可以从官网下载 国内有镜像安装源 例如 https mirrors tu
  • Python智能合约开发指南(以太坊+web3py)

    在以太坊上获得一个基本的智能合约是一个很简单的事 只需google查询 ERC20代币教程 你会发现有关如何做到这一点的大量信息 以编程方式与合约交互完全是另一回事 如果你是一个Python程序员 那么教程就很少 所以写这个Python中的
  • java的队列实现方法_Java实现队列的三种方法集合

    数组实现队列 数组实现队列 class queue int a new int 5 int i 0 入队操作 public void in int m a i m 出队列操作 取出最前面的值 通过循环遍历把所有的数据向前一位 public
  • fairygui简单使用(unity)

    本文主要是引导怎么从fairygui页面ui编辑到unity的过程 如果想详细的那种 最好下载一个官方案例 里面都有详细的教程 不过这个对于新手来说还是挺好的 因为我刚开始以为是自己创建代码 自己写 先去官网下载一个gui编辑器 这是API
  • utf-8和gb2312的相互转换

    最近老是涉及到编码与解码的问题 GB2312转UTF 8 又或者UTF 8转GB2312 无意中在CSDN闲逛发现了一个CString 转UTF 8的思路 现摘寻下来 免得到时又找不着了 CString UTF8Convert CStrin
  • GDB 调试过程

    一 gdb 1 gdb 启动gdb 2 gdb tui 启动gdb 并且分屏显示源代码 3 gdb app 启动gdb调试指定程序app 4 gdb
  • WebSocket 前端使用

    h5提供了WebSocket网络协议 可以实现浏览器与服务器的双向数据传输 构造函数 WebSocket url protocol url WebSocket API URL URL之前需要添加ws 或者wss 类似http https p
  • FastICA代码(matlab版本)

    icasig A W fastica eegdata approach symm g tanh function Out1 Out2 Out3 fastica mixedsig varargin FASTICA Fast Independe
  • 后端开发学习Vue(一)

    Vue的介绍 官网 https cn vuejs org Vue是一个简单容易上手前端框架 例如 下面的代码可以快速构建一个表格
  • Redis数据结构存储系统:第二章:如何使用,BAT等大厂必问技术面试题

    public class RedisUtil private JedisPool jedisPool public void initPool String host int port int database 一线大厂Java面试题解析
  • map与java bean相互转换

    map与java对象的相互转换 1 使用org apache commons beanutils转换 2 使用Introspector转换 3 使用reflect转换 4 使用net sf cglib beans BeanMap转换 5 使
  • ubuntu 强制关闭卡死的pycharm

    ubuntu 环境是 16 04 终端输入 monitor 点击 System monitor 之后输入java 上图是已经删除过的 找到java之后右键点击kill OK
  • Vue(五)&&git

    Vue 三十二 git 1 概述 Git和代码托管中心 2 常用命令 3 本地仓库 4 远程仓库 5 团队内协作 1 非冲突 2 冲突 3 可视化 6 跨团队协作 7 分支 1 分支的好处 2 分支的构建 3 合并分支 8 SSH免密登录

随机推荐

  • html方框打勾字段,HTML+CSS入门 如何设置 checkbox复选框控件的对勾√样式

    本篇教程介绍了HTML CSS入门 如何设置 checkbox复选框控件的对勾 样式 希望阅读本篇文章以后大家有所收获 帮助大家HTML CSS入门 lt 我们要创建方框中的对勾 对于这一点 我们可以使用 after伪类创建一个新的元素 为
  • echarts中toolbox增加自定义图标和事件

    1 echarts提供了丰富的图标 如提供了 saveAsImage保存图片 restore 配置项还原 dataView数据视图工具 dataZoom 数据区域缩放 magicType 动态类型切换 brush 选择组件的控制按钮等 2
  • 开学第五周刷题记录

    Crypto Windows系统密码 首先拿到题目 我们打开看一下 它后缀是 hash 双击之后我们发现打不开 这种情况有两种原因 一是我们没有安装相应的软件 二是该文件被毁坏了 然后我们尝试用记事本打开看一下 结果发现原来重点在这 Adm
  • Jenkins使用问题记录

    1 启动 使用Jenkins的版本为2 138 3 下载war包后启动即可运行 指定使用8080端口 可自定义 java jar jenkins war httpPort 8080 建议后台启动 命令如下 1 启动 指定后台启动 nohup
  • 服务器性能测试脚本大全

    服务器性能测试脚本大全 SFS工具箱集成了数十种服务器性能测试脚本 包括服务器测速 内存测压 CPU跑分 硬盘写入 等待脚本非常齐全 重要的是脚本资源存储于国内节点 执行获取速度快 非那些存储在海外的 执行速度慢等的头疼 下面教大家如何安装
  • git的基本介绍与使用

    一 git的定义与配置 世界上最先进的分布式版本管理系统没有之一 作者 linus linus系统创始人 解决的问题 代码版本管理 多人协作 编写项目 通俗来说 毕业论文初始版 毕业论文修改版 毕业论文最终版 安装网址 Githttps g
  • 基于Sqli-Labs靶场的SQL注入-1~4关

    less 1 Less4联合注入讲解 目录 less 1 基于字符型 单引号 注入点的联合注入 注入类型判断 猜解数据库中字段数 爆破数据库库名以及版本号 爆破数据库中的表名以及数据库安装路径 爆破某张表中的列名以及当前数据库的用户名 查询
  • 分享一个实用的Linux的安全基线检查

    这个脚本主要是用于检查Linux系统的一些基础配置是否存在危险 能够快速的发现问题 定位问题 目前功能还不够全面 后面慢慢完善 喜欢安全的朋友可以微信关注Gamma安全实验室公众号 里面有很多高质量文章以及免费的学习资料 bin bash
  • 使用element-ui上传组件时界面抖动

    参考博客 避免使用push this fileList push name this data key url imgUrl this data key 看项目场景影响 this fileList name this data key ur
  • 原生JS局部刷新

    目录 使用XMLHttpRequest对象进行异步请求 2 使用fetch API进行异步请求 3 使用事件监听器进行局部刷新 4 servlet实现img验证码局部刷新 依赖jar包 Servlet login jsp 在原生JS中 可以
  • c++的初始化与清除

    c 编程思想 阅读笔记 4 第4章 初始化与清除 第2章利用了一些分散的典型c语言库的构件 并把它们封装在一个struct总 从而在库的应用方面做了有意义的改进 从现在起 这个抽象数据类型称为类 1 这样用类名隐藏了类内部的函数名 并且通过
  • 网络层(5.互联网的路由选择协议)

    目录 一 有关路由选择协议的几个基本概念 1 理想的路由算法 2 分层次的路由选择协议 二 内部网关协议RIP 1 工作原理 2 距离向量算法 3 RIP协议的报文格式 4 RIP的优缺点 三 内部网关协议OSPF 1 OSPF协议的基本特
  • jsp服务器文件夹,jsp 服务器建文件夹

    tomcat部署web应用的三种方式 也可以将JSP程序打包成一个war包放在目录下 服务器会自动解开这个war包 并在这个目录下生成一个同名的文件夹 一个war包就是有特性格式的jar包 它是将一个Web程序的所有内容进行压缩得到 具体如
  • 如何使用Visual Studio进行Code Review

    简介 Code Review 不是为了去批斗某个 Coder 而是为了 Team 成员之间相互学习 加深成员对系统业务的理解 使团队成员的代码更加健壮 提早发现代码缺陷 Code Review 的工具有很多种 如 CODING 企业版工具
  • SkyPilot:构建在多云之上的 ML 和数据科学,可节约 3 倍以上成本

    作者 Zongheng Yang 在加州大学伯克利分校研发 SkyPilot 整理 高现起 导读 用于 ML 和数据科学的云计算已经比较困难 如果你想要通过成本优化削减成本 你的整体成本包括资源和人力 可能会不降反增 不想在机器闲置时停止
  • ipad协议优缺点介绍

    大家好 今天给大家介绍下ipad的具体情况以及特点 傻瓜式API 掌握JAVA Go PHP Python等任意一种后端代码 你就可以 通过API 搭建一个 微信机器人功能 用来自动管理微信消息 我们是一家专业提供个人号API的技术团队 服
  • webpack5.0基础配置(全面)

    前言 铁子们好我是跑不快的猪 新的一年 新的开始 先预祝各位都有华丽丽的变身 本篇文章主要进行webpack5 0 版本的配置 在这个脚手架横行的时代 最终还是需要掌握一些基础的配置 对工作 面试 以及各脚手架中webpack的调试都有不小
  • 例说Hausdorff距离

    给定欧氏空间中的两点集 Hausdorff距离就是用来衡量这两个点集间的距离 其中 称为双向Hausdorff距离 称为从点集A到点集B的单向Hausdorff距离 相应地 称为从点集B到点集A的单向Hausdorff距离 下面从一个例子来
  • adb电池节点

    kernel 4 19 lc drivers power supply mtk battery c static enum power supply property battery props POWER SUPPLY PROP STAT
  • BFS java实现

    public class BFS 存放节点关系的hashtable public static void bfs HashMap