实现思路
广度优先方式,是一种地毯式搜索,层层递进的方式,即从开始节点依次遍历相邻节点,层层递进

代码实现
基于之前图的数据结构,实现广度优先算法


import java.util.*;/*** 邻接表方式,存储无向图* 使用连表的数组结构进行图信息的保存* 数组的下标代表的是图顶点本身,下标位置的连表,分别代表相连接的顶点信息*/
public class UndiGraph {/*** 标识图中顶点的个数*/private int point;/*** 定义邻接表*/private LinkedList<Integer> adjacencyList[];/*** 构造方法,初始化数据* @param point*/public UndiGraph(int point){this.point = point;// 初始化连接表数组adjacencyList = new LinkedList[point];for (int i = 0; i < point; i++) {// 初始化邻接表的每一个槽位的连表adjacencyList[i] = new LinkedList<>();}}/*** 向图中,添加顶点和边的信息* @param s 源节点* @param t 目标节点*/public void addPoint(int s,int t) {// 数组的下标,代表当前顶点,连表的数据代表的临边数据adjacencyList[s].add(t);// 因为没有方向,两个节点是互联关系,因此目标节点连线出也有源节点adjacencyList[t].add(s);}/*** bfs 广度优先算法实现,选择一条线路* 地毯式搜索,层层递进,直到找到为止* @param f 开始顶点* @param t 目标顶点*/public void bfs(int f,int t){if (f == t){return;}// 定义一个boolean类型的数组,用来记录顶点是否被访问过boolean[] visited = new boolean[this.point];// 表明起始顶点已经被访问visited[f] = true;/*** 定义一个队列,存储已经被访问过的顶点,但是还有相邻顶点未被访问*/Queue<Integer> queue = new LinkedList<>();queue.add(f);/*** 定义数组,用来存储s到t的线路,* 原理:每一个下标,代表的当前节点的值,而数组下标位置对应的数,就是指向自己的节点* 初始化为-1,代表每个节点,没有来源*/int[] prev = new int[this.point];// 初始化线路为-1initRouter(prev);/*** 循环访问队列中没有被访问的顶点* 当队列不为空的时候,进行循环*/while (!queue.isEmpty()){// 取出队列中的顶点,获取相邻顶点进行访问Integer p = queue.poll();// 遍历顶点的相邻顶点for (int i = 0; i < this.adjacencyList[p].size(); i++) {// 获取当前节点所连接的点Integer sibiling = this.adjacencyList[p].get(i);// 判断节点是否有被访问过,未访问过,则进行访问操作if (!visited[sibiling]){prev[sibiling] = p;if (sibiling==t){printRouterST(prev,f,t);return;}// 标记visited[sibiling] = true;// 相邻顶点存入队列queue.add(sibiling);}}}}/*** 初始化路线* @param router*/public void initRouter(int[] router){for (int i = 0; i < router.length; i++) {router[i] = -1;}}/*** 打印s到t的路线* @param prev* @param s* @param t*/public void printRouterST(int[] prev,int s,int t){if (prev[t] != -1 && s != t){// prev记录的是当前路线,因此向前追溯,一直到开始节点依次打印printRouterST(prev,s,prev[t]);}System.out.print(t+">>");}public static void main(String[] args) {UndiGraph undiGraph = new UndiGraph(8);undiGraph.addPoint(0,1);undiGraph.addPoint(0,3);undiGraph.addPoint(1,2);undiGraph.addPoint(1,4);undiGraph.addPoint(2,5);undiGraph.addPoint(3,4);undiGraph.addPoint(4,5);undiGraph.addPoint(4,6);undiGraph.addPoint(5,7);undiGraph.addPoint(6,7);//undiGraph.bfs(0,7);undiGraph.bfsAllRouter(0,7);}
}

java实现广度优先算法相关推荐

  1. 刷题 BFS 广度优先算法 : 大胖子走迷宫 (python, java)

    刷题 BFS 广度优先算法 : 大胖子走迷宫 (python, java) https://www.lanqiao.cn/problems/234/learning/ http://lx.lanqia ...

  2. java广度优先算法,算法之广度优先搜索

    一.引言 上一次介绍的算法是深度优先搜索 这次我们来研究一下广度优先搜索,看看怎么理解以及写出这个算法 这个算法需要数据结构的基础--队列,如果没有这个基础的同学去恶补一下. 二.小小问题 Q:在一个 ...

  3. 广度优先算法和深度优先算法-树形结构(层级结构)-Java

    广度优先算法和深度优先算法-树形结构(层级结构)-Java 目录 文章目录 1.前言 2.递归 3.栈+深度优先算法 4.队列+广度优先算法 5.比较 ***后记*** : 内容 1.前言 在日常应用 ...

  4. 【图数据结构的遍历】java实现广度优先和深度优先遍历

    [图数据结构的遍历]java实现广度优先和深度优先遍历 宽度优先搜索(BFS)遍历图需要使用队列queue数据结构: 深度优先搜索(DFS, Depth First Search)的实现 需要使用到栈 ...

  5. 广度优先算法之狄克斯特拉算法

    广度优先算法之狄克斯特拉算法 package cn.wizzer.common.util; import java.util.ArrayList; import java.util.HashMap; ...

  6. Java 数据结构和算法(十五):无权无向图

    Java数据结构和算法(十五)--无权无向图 前面我们介绍了树这种数据结构,树是由n(n>0)个有限节点通过连接它们的边组成一个具有层次关系的集合,把它叫做"树"是因为它看起 ...

  7. 高龄白菜java学习第103天(java数据结构和算法(21))

    第七章:图 一.图的创建 思路分析 1.用一个String数组保存顶点 2.用一个二维数组保存邻接矩阵 3.通过方法实现顶点之间边的添加和计数 package Graph;import java.ut ...

  8. 数据结构 - Java -韩顺平 图解Java数据结构和算法

    数据结构 Lesson 1 数据结构的知识总结 1. 几个经典的算法面试题 2. 线性结构与非线性结构 2.1 稀疏数组 sparsearray 2.2 队列 2.2.1 顺序队列: 2.2.2 环形 ...

  9. 一.Java数据结构与算法:如何开始

    数据结构和算法是计算机科学的核心概念之一,它们在软件开发中起着至关重要的作用.学习Java数据结构和算法不仅有助于提高编程能力,还能让你在面试和职业发展中脱颖而出.本文将为你介绍数据结构和算法的重要性 ...

最新文章

  1. 面试官灵魂的一击:你懂MySQL事务吗?
  2. 在web项目中发布jaxws
  3. lazy ideas in programming(编程中的惰性思想)
  4. C#图解教程 第六章 深入理解类
  5. 前端学习(1341):mongoose验证规则延伸
  6. Origin绘制区间图,并添加折线
  7. zabbix mysql.status_zabbix 监控mysql状态
  8. element-ui upload组件 上传文件类型限制
  9. IOS之Objective-C学习 工厂模式
  10. 一招搞定让标签title属性值换行
  11. MATLAB实现滚动密钥密码
  12. vue.js安装步骤教程
  13. Win 10 添加多国语言
  14. 随机数字表法计算机分配,随机数表法.ppt
  15. 如何理解泰勒展开式,他有何用途?
  16. 概率笔记5——概率分布
  17. 「分块」数列分块入门1 – 9 by hzwer 解题记录
  18. 微信响应菜单点击事件php,微信开发实现各种消息的响应
  19. 将blogbus博客搬家至百度空间
  20. 2019届互联网校招高薪清单

热门文章

  1. 《三个白痴》经典语录_值得深思。
  2. 几何基本函数----Point
  3. 联邦自动驾驶汽车调查是迈向联邦监管的第一步吗?
  4. linux安装w3m
  5. 杰理之生产元件脱落与虚焊【篇】
  6. Android 查看更多 TextView实现
  7. Java List 学习记录
  8. java decode函数用法_decode函数的几种用法
  9. msfconsole暴力破解ssh
  10. 技术篇丨音频监控应用现状分析