首页 > 编程语言 >Java深度优先搜索(DFS)算法实现

Java深度优先搜索(DFS)算法实现

时间:2024-11-07 12:17:07浏览次数:3  
标签:优先 Java graph 搜索算法 访问 算法 DFS 深度 顶点

标题:Java深度优先搜索(DFS)算法实现

引言:

深度优先搜索(Depth-First Search,DFS)是一种常用的图遍历算法,它通过递归地遍历图中的每个顶点,来寻找特定的路径或解决某些问题。本篇博客将介绍如何用Java语言实现深度优先搜索算法。

算法思想:

深度优先搜索算法的基本思想是先访问一个顶点,然后递归地访问此顶点的相邻顶点,直到达到某个终点或无法继续递归。如果还存在未被访问的顶点,则选择一个未被访问的顶点继续递归。整个过程可以看作是一种“探索”的过程,类似于在迷宫中寻找出口的过程。

算法实现:

下面是用Java语言实现深度优先搜索算法的伪代码:

class DepthFirstSearch {
    private boolean[] visited;  // 标记顶点是否已被访问
    private Graph graph;  // 图的邻接表表示方式
    
    public DepthFirstSearch(Graph graph) {
        this.graph = graph;
        visited = new boolean[graph.V()];
    }

    // 深度优先搜索算法
    public void dfs(int v) {
        visited[v] = true;  // 标记顶点v已被访问
        System.out.print(v + " ");  // 输出顶点v
        
        // 递归访问v的邻接顶点
        for (int w : graph.adj(v)) {
            if (!visited[w]) {
                dfs(w);
            }
        }
    }
}

在上述代码中,我们使用了一个布尔数组visited来标记顶点是否已被访问。在深度优先搜索算法中,我们首先将起始顶点标记为已访问,并将其输出。然后递归地访问该顶点的邻接顶点(即未被访问的相邻顶点),直到没有未被访问的邻接顶点为止。

应用案例:

下面是一个示例应用,展示了如何使用深度优先搜索算法来遍历图中的所有顶点:

public class Main {
    public static void main(String[] args) {
        Graph graph = new Graph(5);  // 创建一个含有5个顶点的图
        graph.addEdge(0, 1);
        graph.addEdge(0, 2);
        graph.addEdge(1, 3);
        graph.addEdge(2, 4);

        DepthFirstSearch dfs = new DepthFirstSearch(graph);
        dfs.dfs(0);  // 从顶点0开始深度优先搜索
    }
}

上述示例中,我们首先创建了一个含有5个顶点的图,并添加了一些边。然后,我们创建了一个DepthFirstSearch对象,并使用dfs方法从顶点0开始深度优先搜索。最终,输出的结果将是遍历的顶点序列。

结语:

深度优先搜索是一种常用的图遍历算法,可以用于寻找路径、解决迷宫等问题。本篇博客通过Java语言实现了深度优先搜索算法,并展示了一个示例应用。希望读者能通过本文的学习,对深度优先搜索算法有一定的了解和掌握。

标签:优先,Java,graph,搜索算法,访问,算法,DFS,深度,顶点
From: https://blog.csdn.net/qq_31532979/article/details/143321775

相关文章

  • java后端工程师转行AI大模型岗,工作、自我提升两不误!
    随着技术的不断进步,人工智能(AI)已经成为当今科技领域最热门的话题之一。许多开发者开始考虑从传统的软件开发领域,如Java,转向人工智能领域,今天小编和大家一起来探讨Java开发者是否可以转型到人工智能,转型的优势,薪资对比,以及转型所需的知识和学习路线等。01Java开发者能否转......
  • Java(Spring Boot)项目通过 GitHub Actions 流水线实现自动化构建部署
    前两次分享了前端(Vue)项目的自动化构建和 Rust项目的自动化构建,本次就分享JavaSpringBoot项目的自动化构建并部署,部署时需要一台已安装JDK17及以上的Linux服务器。1.新建流水线构建文件在项目的根目录下新建.github/workflows文件夹并在文件夹下新建deploy.yml......
  • 什么是Java中的不可变类
    不可变类是指在创建后其状态(对象的字段)无法被修改的类。一旦对象被创建,它的所有属性都不能被更改,这种类的实例在整个生命周期内保持不变。关键特征:声明类为final,防止子类继承。类的所有字段都是private和final,确保它们在初始化后不能被更改。通过构造函数初始化所有的字......
  • Java流程控制-顺序结构与选择结构
    顺序结构1.Java的基本结构就是顺序结构,除非特别明指,否则就按顺序一句一句执行。2.顺序结构是最简单的算法结构。3.语句与语句之间,框与框之间是按上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。选择结构if单选择结构......
  • c++ Kruskal 最小生成树 (MST) 算法(Kruskal’s Minimum Spanning Tree (MST) Algorith
            对于加权、连通、无向图,最小生成树(MST)或最小权重生成树是权重小于或等于其他所有生成树权重的生成树。Kruskal算法简介:        在这里,我们将讨论Kruskal算法来查找给定加权图的MST。         在Kruskal算法中,按升序对给定图的所有......
  • 常考的排序算法
    冒泡排序#include<iostream>#include<string>usingnamespacestd;//voidShellsort(intA[],intn)//{//   intd,i,j;//   for(d=n/2;d>=1;d=d/2)//   {//      for(i=d+1;i<=n;i++)//      {//     ......
  • Java面试系列-SpringCloud面试题20道,服务注册与发现,断路器,智能路由,熔断,追踪,网关,调用,限
    文章目录1.SpringCloud是什么?2.SpringCloud中的服务注册与发现是如何工作的?3.SpringCloud中的配置管理是如何工作的?4.SpringCloud中的断路器(Hystrix)是如何工作的?5.SpringCloud中的智能路由(Zuul)是如何工作的?6.SpringCloud中的服务熔断(Resilience4j)......
  • Java面试系列-MySQL面试题20道,InnoDB,索引类型,事务隔离级别,锁机制,MVCC,主从复制,慢查询,分
    文章目录1.MySQL中的InnoDB和MyISAM存储引擎有什么区别?2.MySQL中的索引类型有哪些?3.MySQL中的索引是如何工作的?4.MySQL中的事务隔离级别有哪些?5.MySQL中的锁机制有哪些?6.MySQL中的MVCC(多版本并发控制)是如何工作的?7.MySQL中的主从复制是如何工作的?8.MySQL中的分区......
  • JavaScript Kruskal 最小生成树 (MST) 算法(Kruskal’s Minimum Spanning Tree (MST) A
             对于加权、连通、无向图,最小生成树(MST)或最小权重生成树是权重小于或等于其他所有生成树权重的生成树。Kruskal算法简介:        在这里,我们将讨论Kruskal算法来查找给定加权图的MST。         在Kruskal算法中,按升序对给定图的所......
  • 158java ssm springboot基于Hive的大数据高校学生考试分析可视化系统考试评估(源码+文
         文章目录系列文章目录前言一、详细视频演示二、项目部分实现截图三、技术栈后端框架springboot前端框架vue持久层框架MyBaitsPlus系统测试四、代码参考源码获取前言......