数据结构(11)图的遍历,DFS、BFS的JAVA实现

简介: 11.1.图的遍历图的遍历,即将图内所有顶点都访问一遍。有两种遍历方式:BFSDFS以下图的遍历为例:

11.1.图的遍历

图的遍历,即将图内所有顶点都访问一遍。

有两种遍历方式:

  • BFS
  • DFS

以下图的遍历为例:

31a3bd26eacd44f1b7acfa6824cafc79.png

11.2.DFS

DFS(depth first search),深度优先搜索,先跑到叶节点,沿着原路返回,沿途遍历其他节点。

代码示例:

public class DFS {
    //图
    static int[][] graph=new int[7][7];
    //访问记录
    static boolean[] isVisited=new boolean[7];
    static {
        graph[0][1]=1;graph[0][2]=1;graph[0][3]=1;
        graph[1][0]=1;graph[1][2]=1;
        graph[2][0]=1;graph[2][1]=1;graph[2][3]=1;graph[2][4]=1;graph[2][5]=1;
        graph[3][0]=1;graph[3][2]=1;graph[3][4]=1;
        graph[4][2]=1;graph[4][3]=1;
        graph[5][2]=1;
        graph[5][6]=1;
        graph[6][5]=1;
    }
    public static void DFS(int i){
        System.out.println(i);
        isVisited[i]=true;
        for(int j=0;j<graph[i].length;j++){
            if(graph[i][j]==1&&isVisited[j]==false){
                DFS(j);
            }
        }
    }
    public static void main(String[] args) {
        DFS(0);
    }
}

11.3.BFS

BFS(Breadth first search),广度优先搜索,先遍历一度关系(直接相连),再遍历二度关系(直接相连的直接相连),再遍历三度关系(直接相连的直接相连的直接相连)……直到遍历完整个图。过程类似于树的层序遍历。

public class BFS {
    //图
    static int[][] graph=new int[7][7];
    //访问记录
    static boolean[] isVisited=new boolean[7];
    //队列
    static LinkedList<Integer> queue=new LinkedList();
    static {
        graph[0][1]=1;graph[0][2]=1;graph[0][3]=1;
        graph[1][0]=1;graph[1][2]=1;
        graph[2][0]=1;graph[2][1]=1;graph[2][3]=1;graph[2][4]=1;graph[2][5]=1;
        graph[3][0]=1;graph[3][2]=1;graph[3][4]=1;
        graph[4][2]=1;graph[4][3]=1;
        graph[5][2]=1;
        graph[5][6]=1;
        graph[6][5]=1;
    }
    public static void BFS(){
        while(!queue.isEmpty()){
            int i=queue.poll();
            System.out.println("出队:"+i);
            isVisited[i]=true;
            for(int j=0;j<graph[i].length;j++){
                if(graph[i][j]==1&&isVisited[j]==false) {
                    System.out.println("入队:"+j);
                    isVisited[j]=true;
                    queue.offer(j);
                }
            }
        }
    }
    public static void main(String[] args) {
        queue.offer(0);
        BFS();
    }
}


目录
相关文章
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
131 2
【C++数据结构——图】图的遍历(头歌教学实验平台习题) 【合集】
本文介绍了图的遍历算法,包括深度优先遍历(DFS)和广度优先遍历(BFS)。深度优先遍历通过递归方式从起始节点深入探索图,适用于寻找路径、拓扑排序等场景;广度优先遍历则按层次逐层访问节点,适合无权图最短路径和网络爬虫等应用。文中提供了C++代码示例,演示了如何实现这两种遍历方法,并附有测试用例及结果,帮助读者理解和实践图的遍历算法。
122 0
|
5月前
|
数据结构之卫星通信网络(BFS)
本文介绍了卫星通信网络及其重要性,并探讨了广度优先搜索(BFS)算法在其中的应用。卫星通信网络通过在轨卫星提供全球覆盖的通信服务,尤其在偏远地区和紧急救援中发挥关键作用。BFS算法用于网络拓扑分析、路径规划和故障排除,确保通信网络的高效运行。文章还包括BFS算法的工作原理、特点、优缺点及其实现代码示例。
129 1
数据结构之数据中心网络路由(BFS)
本文介绍了数据中心网络路由中使用广度优先搜索(BFS)算法的重要性及其应用。随着数据中心从集中式大型机系统发展到分布式架构,高效的数据路由成为确保低延迟、高吞吐量和网络可靠性的关键。BFS通过系统地探索网络层次,从源节点开始向外遍历,确保发现最短路径,特别适合于数据中心网络环境。文中还提供了BFS算法的具体实现代码,展示了如何在数据中心网络中应用该算法来查找节点间的最短路径,并讨论了BFS的优缺点。
97 0
数据结构之数据中心网络路由(BFS)
数据结构之货仓选址问题(DFS)
货仓选址问题是供应链管理中的关键挑战,直接影响物流效率和成本。本文介绍了一种基于深度优先搜索(DFS)算法的解决方案,通过计算不同位置的总距离,找到使总距离最小的最优货仓位置。此方法适用于小规模数据集,易于理解与实现,但随数据量增大,效率显著下降。示例代码展示了如何利用DFS算法计算最小总距离,并提供了完整的实现流程。
123 0
数据结构之货仓选址问题(DFS)
|
5月前
|
数据结构之网络流量路径分析(BFS)
网络流量路径分析利用BFS算法在网络图中寻找从源节点到目标节点的最短路径,帮助识别网络瓶颈、优化数据流,提升网络性能。本示例通过构建一个无向图,展示了如何使用BFS算法进行路径分析,找到从节点0到节点5的有效路径,验证了算法的实用性和有效性。
114 0
数据结构之洪水填充算法(DFS)
洪水填充算法是一种基于深度优先搜索(DFS)的图像处理技术,主要用于区域填充和图像分割。通过递归或栈的方式探索图像中的连通区域并进行颜色替换。本文介绍了算法的基本原理、数据结构设计(如链表和栈)、核心代码实现及应用实例,展示了算法在图像编辑等领域的高效性和灵活性。同时,文中也讨论了算法的优缺点,如实现简单但可能存在堆栈溢出的风险等。
207 0
【初阶数据结构】掌握二叉树遍历技巧与信息求解:深入解析四种遍历方法及树的结构与统计分析
【初阶数据结构】掌握二叉树遍历技巧与信息求解:深入解析四种遍历方法及树的结构与统计分析
数据结构基础详解(C语言): 二叉树的遍历_线索二叉树_树的存储结构_树与森林详解
本文从二叉树遍历入手,详细介绍了先序、中序和后序遍历方法,并探讨了如何构建二叉树及线索二叉树的概念。接着,文章讲解了树和森林的存储结构,特别是如何将树与森林转换为二叉树形式,以便利用二叉树的遍历方法。最后,讨论了树和森林的遍历算法,包括先根、后根和层次遍历。通过这些内容,读者可以全面了解二叉树及其相关概念。
156 6