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

深入理解与实现:常见搜索算法的Java示例


深入理解与实现:常见搜索算法的Java示例

搜索算法在计算机科学中扮演着重要角色,用于在数据集中查找特定元素或解决问题。在本篇博客中,我们将深入探讨图算法的一个重要分支:图的搜索算法。具体而言,我们将介绍图的深度优先搜索(DFS)和广度优先搜索(BFS),并为每个算法提供详细的Java代码示例。

深度优先搜索(DFS)

概念:深度优先搜索是一种用于遍历图或树结构的算法。它从起始节点开始,尽可能深入地访问未被访问过的节点,直到达到最深处,然后回溯并继续探索其他分支。

应用:DFS常用于查找路径、拓扑排序、连通性检测等。

Java代码示例

import java.util.LinkedList;class GraphDFS {private int V; // 节点数private LinkedList<Integer>[] adj; // 邻接表public GraphDFS(int vertices) {V = vertices;adj = new LinkedList[V];for (int i = 0; i < V; i++) {adj[i] = new LinkedList<>();}}// 添加边public void addEdge(int v, int w) {adj[v].add(w);}void dfs(int v, boolean[] visited) {visited[v] = true;System.out.print(v + " ");for (int neighbor : adj[v]) {if (!visited[neighbor]) {dfs(neighbor, visited);}}}void DFS(int start) {boolean[] visited = new boolean[V];dfs(start, visited);}public static void main(String[] args) {GraphDFS graph = new GraphDFS(7);graph.addEdge(0, 1);graph.addEdge(0, 2);graph.addEdge(1, 3);graph.addEdge(1, 4);graph.addEdge(2, 5);graph.addEdge(2, 6);System.out.println("深度优先遍历:");graph.DFS(0);}
}

广度优先搜索(BFS)

概念:广度优先搜索也用于遍历图或树,它从起始节点开始,首先访问所有邻居节点,然后逐层扩展。

应用:BFS常用于寻找最短路径、最小生成树等。

Java代码示例

import java.util.LinkedList;
import java.util.Queue;class GraphBFS {private int V; // 节点数private LinkedList<Integer>[] adj; // 邻接表public GraphBFS(int vertices) {V = vertices;adj = new LinkedList[V];for (int i = 0; i < V; i++) {adj[i] = new LinkedList<>();}}// 添加边public void addEdge(int v, int w) {adj[v].add(w);}void BFS(int start) {boolean[] visited = new boolean[V];Queue<Integer> queue = new LinkedList<>();visited[start] = true;queue.add(start);while (!queue.isEmpty()) {int v = queue.poll();System.out.print(v + " ");for (int neighbor : adj[v]) {if (!visited[neighbor]) {visited[neighbor] = true;queue.add(neighbor);}}}}public static void main(String[] args) {GraphBFS graph = new GraphBFS(7);graph.addEdge(0, 1);graph.addEdge(0, 2);graph.addEdge(1, 3);graph.addEdge(1, 4);graph.addEdge(2, 5);graph.addEdge(2, 6);System.out.println("广度优先遍历:");graph.BFS(0);}
}

通过本篇博客,我们深入探讨了图的深度优先搜索和广度优先搜索算法,为每个算法提供了详细的Java代码示例。这些算法不仅在计算机科学中具有重要意义,而且在解决实际问题时也发挥着重要作用。

希望本文对您理解图搜索算法有所帮助。如果您对其他算法也感兴趣,欢迎继续探索和学习!

相关文章:

深入理解与实现:常见搜索算法的Java示例

深入理解与实现&#xff1a;常见搜索算法的Java示例 搜索算法在计算机科学中扮演着重要角色&#xff0c;用于在数据集中查找特定元素或解决问题。在本篇博客中&#xff0c;我们将深入探讨图算法的一个重要分支&#xff1a;图的搜索算法。具体而言&#xff0c;我们将介绍图的深…...

PHP自己的框架实现操作成功失败跳转(完善篇四)

1、实现效果&#xff0c;操作成功后失败成功自动跳转 2、创建操作成功失败跳转方法CrlBase.php /**成功后跳转*跳转地址$url* 跳转显示信息$msg* 等待时间$wait* 是否自动跳转$jump*/protected function ok($urlNULL,$msg操作成功,$wait3,$jump1){$code1;include KJ_CORE./tp…...

【汇编语言】CS、IP寄存器

文章目录 修改CS、IP的指令转移指令jmp问题分析 修改CS、IP的指令 理论&#xff1a;CPU执行何处的指令&#xff0c;取决于CS:IP应用&#xff1a;程序员可以通过改变CS、IP中的内容&#xff0c;进行控制CPU即将要执行的目标指令&#xff1b;问题&#xff1a;如何改变CS、IP中的…...

Nvidia Jetson 编解码开发(3)解决H265解码报错“PPS id out of range”

1.问题描述 基于之前的开发程序 Nvidia Jetson 编解码开发(2)Jetpack 4.x版本Multimedia API 硬件编码开发--集成encode模块_free-xx的博客-CSDN博客 通过Jetson Xavier NX 硬编码的H265发出后, 上位机断点播放发出来的H265码流, 会报“PPS id out of range” 错误 …...

Angular中如何获取URL参数?

Angular中的ActivatedRoute中保存着路由信息&#xff0c;可用来提取URL中的路由参数。 constructor(private route: ActivatedRoute){}ngOnInit(): void {this.getUser();}getUser(): void {const id this.route.snapshot.paramMap.get(id);} }route.snapshot是一个路由信息的…...

uniapp编写微信小程序和H5遇到的坑总结

uniapp编写微信小程序和H5遇到的坑总结 1、阻止事件冒泡2、二维码生成3、H5跨域配置4、H5时&#xff0c;地址栏上添加版本号5、H5时&#xff0c;tabBar遮挡部分内容6、uniapp使用webview通信6.1、uniapp编写的小程序嵌入h5之间的通信6.1.1、小程序向h5发送消息6.1.2、h5向小程序…...

课程表-广度优先和图

你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示如果要学习课程 ai 则 必须 先学习课程 bi 。 例如&am…...

机器学习|决策树:数学原理及代码解析

机器学习&#xff5c;决策树&#xff1a;数学原理及代码解析 决策树是一种常用的监督学习算法&#xff0c;适用于解决分类和回归问题。在本文中&#xff0c;我们将深入探讨决策树的数学原理&#xff0c;并提供 Python 示例代码帮助读者更好地理解和实现该算法。 决策树数学原…...

1.0的星火2.0必将燎原——图文声影PPT全测试

一、前言 大家好&#xff0c;勇哥又来分享AI模型了&#xff0c;前几天讯飞发布的星火大模型2.0迅速的进入了我们圈子里&#xff0c;为了有更多更好的模型分享给大家&#xff0c;分享星火大模型2.0是必须做的&#xff0c;我做一个传递着&#xff0c;希望大家也星火相传啊。 我…...

[MySQL]主从服务器布置

配置主服务器 配置文件 /etc/my.cnf 在[mysqld]下进行配置 log_binON //启动二进制日志 log-bin mysql-bin //启用二进制日志&#xff0c;用于记录主服务器的更新操作 server-id 1 // 用来表示mysql服务id,保证集成环境中的唯一性 , 范围 [1,2^32) read-only0 // 1表示只…...

图像处理算法大全(基于libyuv或IPP)----NV12转成I420,RGB24,ARGB集合

《周星星教你学ffmpeg》技巧 libyuv源码&#xff1a; static void NV12ToI420(BYTE* pNV12_Y, BYTE* pNV12_UV, BYTE* pYV12, int width, int height) { libyuv::NV12ToI420(pNV12_Y, width, pNV12_UV, width, pYV12, width, pYV12 height*width, width / 2, pYV12 hei…...

机器人操作系统:ROS2 仿真入门

塞巴斯蒂安 一、说明 在机器人项目中&#xff0c;仿真是一个具有多种用途的重要方面。首先&#xff0c;您可以测试希望机器人执行的行为代码。其次&#xff0c;您可以使用仿真来测试不同类型的硬件&#xff0c;例如距离传感器、相机或 3D 点云传感器&#xff0c;看看哪种效果最…...

面试题:线程池的底层工作原理

线程池的几个重要的参数&#xff1a; 1、corePoolSize&#xff1a;线程池的核心线程数&#xff08;也是默认线程数&#xff09; 2、maximumPoolSize&#xff1a;最大线程数 3、keepAliveTime&#xff1a;允许的线程最大空闲时间&#xff08;单位/秒&#xff09; 线程池内部是…...

Excel/PowerPoint条形图改变顺序

条形图是从下往上排的&#xff0c;很多时候不是我们想要的效果 解决方案 选择坐标轴&#xff0c;双击&#xff0c;按下图顺序点击 效果...

【操作系统】虚拟内存相关分段分页页面置换算法

虚拟内存是什么&#xff1f; 【进程地址空间虚拟地址空间C/C程序地址空间就是那个4G的空间】 虚拟内存是操作系统内核为了对进程地址空间进行管理&#xff0c;而设计的一个逻辑意义上的内存空间概念。在程序运行过程中&#xff0c;虚拟内存中需要被访问的部分会被映射到物理内…...

Unrecognized Hadoop major version number: 3.0.0-cdh6.3.2

一.环境描述 spark提交job到yarn报错&#xff0c;业务代码比较简单&#xff0c;通过接口调用获取数据&#xff0c;将数据通过sparksql将数据写入hive中&#xff0c;尝试各种替换hadoop版本&#xff0c;最后拿下 1.hadoop环境 2.项目 pom.xml spark-submit \ --name GridCorr…...

机器学习分类,损失函数中为什么要用Log,机器学习的应用

目录 损失函数中为什么要用Log 为什么对数可以将乘法转化为加法&#xff1f; 机器学习&#xff08;Machine Learning&#xff09; 机器学习的分类 监督学习 无监督学习 强化学习 机器学习的应用 应用举例&#xff1a;猫狗分类 1. 现实问题抽象为数学问题 2. 数据准备…...

PySpark安装及WordCount实现(基于Ubuntu)

先盘点一下要安装哪些东西&#xff1a; VMwareubuntu 14.04&#xff08;64位&#xff09;Java环境&#xff08;JDK 1.8&#xff09;Hadoop 2.7.1Spark 2.4.0&#xff08;Local模式&#xff09;Pycharm &#xff08;一&#xff09;Ubuntu VMware 和 ubuntu 14.04&#xff08;…...

SpringBoot 模板模式实现优惠券逻辑

一、计算逻辑的类结构图 在这张图里&#xff0c;顶层接口 RuleTemplate 定义了 calculate 方法&#xff0c;抽象模板类 AbstractRuleTemplate 将通用的模板计算逻辑在 calculate 方法中实现&#xff0c;同时它还定义了一个抽象方法 calculateNewPrice 作为子类的扩展点。各个具…...

并查集 rank 的优化(Java 实例代码)

目录 并查集 rank 的优化 Java 实例代码 UnionFind3.java 文件代码&#xff1a; 并查集 rank 的优化 上一小节介绍了并查集基于 size 的优化&#xff0c;但是某些场景下&#xff0c;也会存在某些问题&#xff0c;如下图所示&#xff0c;操作 union(4,2)。 根据上一小节&…...

如何用轻量工具实现Windows 11系统深度净化?

如何用轻量工具实现Windows 11系统深度净化&#xff1f; 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本&#xff0c;用于从Windows中移除预装的无用软件&#xff0c;禁用遥测&#xff0c;从Windows搜索中移除Bing&#xff0c;以及执行各种其他更改以简化和改善你的Wi…...

别再硬编码了!用CRMEB标准版的可视化定时任务,5分钟搞定自动发券

告别硬编码时代&#xff1a;CRMEB可视化定时任务实战指南 在电商系统开发中&#xff0c;定时任务就像一位不知疲倦的助手&#xff0c;默默处理着自动发券、订单状态更新、数据清理等重复性工作。但传统开发方式往往需要开发者手动编写Crontab配置或硬编码任务逻辑&#xff0c;不…...

Z-Image-GGUF模型解析:C语言视角下的文件读写与GGUF格式处理

Z-Image-GGUF模型解析&#xff1a;C语言视角下的文件读写与GGUF格式处理 你是不是也好奇&#xff0c;那些动辄几十GB的大模型文件&#xff0c;计算机到底是怎么“看懂”并加载它们的&#xff1f;今天我们不聊高层的API调用&#xff0c;而是拿起C语言这把“手术刀”&#xff0c…...

FPGA Multiboot翻车实录:从XDC配置到ICAPE2,我的W25Q128分区血泪史与避坑指南

FPGA Multiboot实战&#xff1a;从配置陷阱到Flash分区优化的全流程解析 第一次在量产产品中实现FPGA远程更新功能时&#xff0c;我盯着实验室里突然变砖的开发板&#xff0c;后背渗出一层冷汗。原本以为按照官方文档配置就能万无一失&#xff0c;没想到Multiboot这个看似简单的…...

OpenClaw浏览器自动化:ollama-QwQ-32B驱动的研究资料收集系统

OpenClaw浏览器自动化&#xff1a;ollama-QwQ-32B驱动的研究资料收集系统 1. 为什么需要自动化研究资料收集 作为一名经常需要查阅大量文献的技术写作者&#xff0c;我长期被资料收集的效率问题困扰。传统工作流程中&#xff0c;我需要手动在Google Scholar、arXiv、知乎等平…...

从LLaVA到Stable Diffusion:多模态融合选拼接还是交叉注意力?一张图帮你做技术选型

多模态融合技术选型指南&#xff1a;拼接与交叉注意力的深度对比与实践策略 在构建现代多模态AI系统时&#xff0c;工程师们常常面临一个关键决策点&#xff1a;如何有效地融合来自不同模态的信息&#xff1f;想象一下&#xff0c;你正在开发一个智能医疗影像分析系统&#xff…...

电机设计就像玩拼图,参数之间总在较劲。今天咱们用有限元+Matlab扒一扒参数敏感度的底裤,带点代码实操更带劲

电动机&#xff0c;发电机的参数灵敏度分析 步骤一&#xff0c;基于有限元法采集数据 步骤二&#xff0c;基于Matlab程序进行参数灵敏度分析 步骤三&#xff0c;分析结果绘图第一步&#xff1a;有限元暗房操作用ANSYS Maxwell搭个永磁同步电机模型&#xff0c;重点盯着磁钢厚度…...

SAP--S4/HANA

1、Webdispatcher 2、ASCS 全称&#xff1a;ABAP Central Services Instance&#xff08;在 Java 栈中称为 SCS - Java Central Services&#xff09;。 核心功能&#xff1a;它是 SAP 系统的“大脑”或控制中心&#xff0c;不包含处理具体业务对话&#xff08;Dialog&#xff…...

深度解析 ConcurrentHashMap 1.8:put 与 get 核心流程全解

在 Java 并发编程中&#xff0c;ConcurrentHashMap 是线程安全的高频使用集合&#xff0c;相比线程不安全的 HashMap、效率低下的 HashTable&#xff08;全锁&#xff09;&#xff0c;JDK 1.8 版本的 ConcurrentHashMap 做了底层结构重构和锁机制优化&#xff0c;成为高并发场景…...

突破VMware限制:在非苹果硬件上构建macOS开发环境完全指南

突破VMware限制&#xff1a;在非苹果硬件上构建macOS开发环境完全指南 【免费下载链接】unlocker 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 实现跨平台macOS体验&#xff1a;VMware Unlocker核心价值解析 当开发者需要在Windows或Linux工作站上构建m…...