当前位置: 首页 > news >正文

BFS算法概述

BFS 算法实现(Java)

BFS(广度优先搜索)是一种图遍历算法,使用队列数据结构实现。以下是 Java 中 BFS 的两种常见实现方式:基于邻接表表示的图和基于矩阵表示的图。

邻接表表示的图的 BFS 实现
import java.util.*;class Graph {private int V; // 顶点数private LinkedList<Integer> adj[]; // 邻接表Graph(int v) {V = v;adj = new LinkedList[v];for (int i = 0; i < v; ++i)adj[i] = new LinkedList();}void addEdge(int v, int w) {adj[v].add(w);}void BFS(int s) {boolean visited[] = new boolean[V]; // 标记访问过的节点Queue<Integer> queue = new LinkedList<>();visited[s] = true;queue.add(s);while (!queue.isEmpty()) {s = queue.poll();System.out.print(s + " ");for (Integer n : adj[s]) {if (!visited[n]) {visited[n] = true;queue.add(n);}}}}
}public class Main {public static void main(String args[]) {Graph g = new Graph(4);g.addEdge(0, 1);g.addEdge(0, 2);g.addEdge(1, 2);g.addEdge(2, 0);g.addEdge(2, 3);g.addEdge(3, 3);System.out.println("BFS traversal (starting from vertex 2):");g.BFS(2);}
}

矩阵表示的图的 BFS 实现
import java.util.*;class Graph {private int V; // 顶点数private int adj[][]; // 邻接矩阵Graph(int v) {V = v;adj = new int[v][v];}void addEdge(int v, int w) {adj[v][w] = 1;}void BFS(int s) {boolean visited[] = new boolean[V];Queue<Integer> queue = new LinkedList<>();visited[s] = true;queue.add(s);while (!queue.isEmpty()) {s = queue.poll();System.out.print(s + " ");for (int i = 0; i < V; i++) {if (adj[s][i] == 1 && !visited[i]) {visited[i] = true;queue.add(i);}}}}
}public class Main {public static void main(String args[]) {Graph g = new Graph(4);g.addEdge(0, 1);g.addEdge(0, 2);g.addEdge(1, 2);g.addEdge(2, 0);g.addEdge(2, 3);g.addEdge(3, 3);System.out.println("BFS traversal (starting from vertex 2):");g.BFS(2);}
}

关键点说明

  • 队列的使用:BFS 使用队列来存储待访问的节点,确保按照层级顺序遍历。
  • 访问标记:使用布尔数组标记已访问的节点,避免重复访问。
  • 时间复杂度:对于邻接表表示,时间复杂度为 O(V + E);对于邻接矩阵表示,时间复杂度为 O(V²),其中 V 是顶点数,E 是边数。

这两种实现方式适用于不同的图表示方法,邻接表更适合稀疏图,邻接矩阵更适合稠密图。


文章转载自:

http://bsjx3VIS.wkLmj.cn
http://Vp0NCc1w.wkLmj.cn
http://tMHPtoTL.wkLmj.cn
http://lZb1aK89.wkLmj.cn
http://CKUEdmGr.wkLmj.cn
http://i01PWSej.wkLmj.cn
http://7oDWrwO9.wkLmj.cn
http://gw55xY5t.wkLmj.cn
http://OAd1s4Sv.wkLmj.cn
http://pTaF4d7j.wkLmj.cn
http://4AgXElWl.wkLmj.cn
http://kLp4stlu.wkLmj.cn
http://HwqwLwlD.wkLmj.cn
http://YtVtO0aL.wkLmj.cn
http://UlxonJvx.wkLmj.cn
http://wv9fAFdQ.wkLmj.cn
http://bcaiPcuP.wkLmj.cn
http://LVXr92HO.wkLmj.cn
http://CAcqZBtT.wkLmj.cn
http://dzNGD27j.wkLmj.cn
http://LAj2EWJJ.wkLmj.cn
http://Ico6IQFJ.wkLmj.cn
http://Q6Q5RfvH.wkLmj.cn
http://4Ikr8hc5.wkLmj.cn
http://5T8XYWAm.wkLmj.cn
http://opSdZbYs.wkLmj.cn
http://g2D1t1Rh.wkLmj.cn
http://bfgUnEMe.wkLmj.cn
http://Zgi3DHjx.wkLmj.cn
http://LKaKEvGb.wkLmj.cn
http://www.dtcms.com/a/384068.html

相关文章:

  • ASRU卡上测量运算放大器的原理
  • python 中的datetime, time(笔记向)
  • 枚举:扫雷
  • Baukit库使用教程--监督和修改LLM中间层输出
  • 14.ImGui-DX11虚表hook(一)-认识虚表
  • 15.渗透-.Linux基础命令(六)-用户管理(group文件)
  • 数字赋能农业:多场景智慧农业解决方案与平台实践解析
  • App Router vs. Pages Router:我应该如何选择?
  • 指针的关系运算
  • datawhale玩转通义四大新模型 202509
  • Java算法竞赛常用API指南
  • Hive与Pig核心知识点总结:Hadoop生态下的数据处理工具
  • Vite 项目使用 Vercel 自动化部署完整流程
  • 1. 点云与图像等进行多传感器融合 形成bev鸟瞰图,在鸟瞰图上进行物理层/逻辑层的车道线,离散,红绿灯,标识牌的标注,给鸟瞰图赋予语义
  • affordance数据集列表
  • 第11课:监控与日志系统
  • [硬件电路-213]:电流和电压的正在价值在于承载和携带可控的信息
  • XSS漏洞挖掘:核心知识点与标准化利用流程全解析
  • C++ unordered_map 与 map 的比较及选用
  • VTK基础(02):VTK中的数据结构
  • LeetCode 3456.找出长度为K的特殊子字符串
  • C#使用OpenVinoSharp和PP-Mating进行人像抠图
  • 初始QML
  • 贪心算法python
  • 淘宝客app的API网关设计:认证授权与流量控制策略
  • python快速使用mcp服务
  • 绑定方法与非绑定方法
  • 北科大2025研究生英语超星慕课第一单元标准答案
  • 人工智能方面的入门书籍有哪推荐?
  • STL之string类(C++)