DFS与BFS 深度优先遍历与广度优先遍历的算法实现
BFS算法实现图的遍历
程序如下:
package algorithm; import java.util.LinkedList; import java.util.Queue; public class Bfs { /** * 好高深啊 广度优先遍历 */ public static void main(String[] args) { // 以邻接矩阵表示树,设定初始值 int[][] graph = new int[7][7]; // 矩阵初始化,无向图,注意对角线的值全设为零,相对称的值设为相同 // 最好先画图再设矩阵 // 先全设为0表示无连接,再将有连接的地方改为1 for (int i = 0; i < 6; i++) { for (int j = 0; j < 6; j++) { graph[i][j] = 0; } } graph[0][1] = 1; graph[1][0] = 1; graph[1][2] = 1; graph[2][1] = 1; graph[1][3] = 1; graph[3][1] = 1; graph[3][4] = 1; graph[4][3] = 1; graph[3][5] = 1; graph[5][3] = 1; graph[5][6] = 1; graph[6][5] = 1; // 设置标志数组,为0时表示当前节点没有访问过,为1时表示访问过了,初始化全部设0 int[] mark = new int[graph.length];// graph.length返回的是第一维的维数,不是数组长度 for (int k = 0; k < mark.length; k++) { mark[k] = 0; } // 设置队列,java里LinkedList实现了queue接口,所以用list就能表示队列 Queue<Integer> queue = new LinkedList<Integer>(); // 我们这里从0节点开始遍历 if (mark[0] == 0)// mark[0]=0表示还没查看0节点,下面开始查看 { mark[0] = 1; queue.add(0); while (!queue.isEmpty()) { // 取出队列值并输出 int l = (Integer) queue.poll(); // 最先放到队列里的值,注意队列的先进先出特性啊 System.out.println("l=" + l); for (int n = 0; n < graph.length; n++) { // 如果为1,即表示有连接,且还未入队列,压入队列,设置当前值为-1,表示已经访问 if (graph[l][n] == 1) { if (mark[n] != 1) { // 如果n节点没有访问过则入队列,否则不处理 queue.add(n); mark[n] = 1; } } } } } } }
队列queue变化:
BFS输出结果:
l=0 l=1 l=2 l=3 l=4 l=5 l=6
相关推荐
图的深度遍历和广度遍历是两个重要的算法,这也是我们理解并掌握图这一数据结构的基础。通过此程序算法可以进一步掌握图的构造以及遍历的相关知识。 图的深度优先遍历算法 图的深度优先遍历(Depth-First Search,...
广度优先遍历(Breadth-First Search,BFS)是一种遍历无向图的算法。它的基本思想是从某个顶点开始,沿着图的边水平遍历图,直到所有顶点都被访问过为止。 在本文中,我们使用队列来实现广度优先遍历。队列的基本...
接下来,我们讨论深度优先遍历(DFS)和广度优先遍历(BFS)算法。 **深度优先遍历(DFS)** 是一种递归策略,从给定的起点开始,尽可能深地探索图的分支,直到到达叶子节点,然后回溯。在给定的代码中,`dfs` 函数...
4. **广度优先遍历**:`bfs`函数实现了BFS算法,通过队列来管理待访问的顶点。 5. **辅助函数**:`InitQueue`用于初始化队列,`EnQueue`用于向队列中添加元素,`DeQueue`用于从队列中移除元素,`QueueEmpty`用于判断...
本篇文章将深入探讨两种主要的图遍历算法:深度优先遍历(DFS,Depth-First Search)和广度优先遍历(BFS,Breadth-First Search),并提供C语言的实现。 **深度优先遍历(DFS)** 深度优先遍历是一种递归的策略,...
在这个程序设计任务中,我们需要实现的是连通无向图的深度优先遍历(DFS)和广度优先遍历(BFS),这两种遍历方法是图算法的基础。无向图指的是图中的边没有方向,即任意两个节点之间可以双向连接。 1. **邻接表和...
本话题主要探讨如何使用非递归算法对无向图进行深度优先遍历(DFS, Depth First Search)和广度优先遍历(BFS, Breadth First Search),这两种遍历方法在图算法中有着广泛的应用。 **1. 邻接表表示法** 在处理大...
在计算机科学和人工智能领域中,对于搜索问题的解决方法有很多,广度优先遍历(Breadth-First Search,BFS)是一种常用的方法。八数码问题(Eight Puzzle)是一种经典的搜索问题,通过广度优先遍历可以解决该问题。 ...
在本篇文章中,我们将探讨图数据结构的存储方法及其两种主要的遍历算法:深度优先搜索(DFS)和广度优先搜索(BFS)。图是一种非线性的数据结构,由顶点集合和边集合组成。为了有效地表示图结构并实现相应的操作,...
广度优先遍历(Breadth-First Search,简称 BFS)是一种用于遍历或搜索树或图的算法。其特点是先访问离起始节点距离较近的所有节点,再逐步扩展到距离更远的节点。在实际应用中,BFS 被广泛应用于寻找最短路径、检测...
在这个主题下,我们将深入探讨深度优先遍历(DFS, Depth First Search)和广度优先遍历(BFS, Breadth First Search),以及在树结构中常见的先序、中序和后序遍历。这些遍历方法各有其特点,适用于不同的问题场景。...
本压缩包提供了一份针对新手学习C语言实现数据结构和算法的资源,特别关注了图的深度优先遍历与广度优先遍历、二叉查找树、二叉树、堆排序算法以及KMP算法。以下是这些知识点的详细说明: 1. **图的深度优先遍历...
广度优先遍历 (BFS) **广度优先遍历**是从一个顶点开始,先访问它的所有邻接顶点,再依次访问这些邻接顶点的所有未访问过的邻接顶点,以此类推。 给定的代码实现了一个BFS算法: 1. 初始化一个布尔数组`visited`...
在这个压缩包中,包含了一个用C语言实现的程序,用于执行图的深度优先遍历(DFS, Depth-First Search)和广度优先遍历(BFS, Breadth-First Search)。以下是这两个遍历方法的详细解释: 1. **深度优先遍历(DFS)*...
综上所述,邻接表表示的图的广度优先遍历是图论和算法领域的一个核心概念,它结合了数据结构和算法思想,广泛应用于网络分析、路径搜索等多个领域。通过理解和熟练掌握这一方法,能够帮助我们在解决复杂问题时更有效...
本主题将详细探讨两种主要的图遍历方法:广度优先遍历(Breadth First Search, BFS)和深度优先遍历(Depth First Search, DFS),以及它们在寻找最短路径中的应用。 首先,让我们理解这两个概念: 1. **广度优先...
广度优先遍历(Breadth-First Search,简称BFS)是一种用于遍历或搜索树或图的算法。在图中,该算法从根节点开始,并沿着节点的边逐层探索,首先访问最近的节点,然后再访问其邻居节点,以此类推,直到所有可达节点...
本文将深入探讨Java中实现的四个核心图算法:深度优先遍历(DFS)、广度优先遍历(BFS)、最短路径算法以及最小生成树算法。 首先,**深度优先遍历(DFS)**是一种用于遍历或搜索树或图的算法。它从根节点开始,尽...
本文将重点介绍两种常用的图遍历算法:深度优先遍历(Depth First Search, DFS)和广度优先遍历(Breadth First Search, BFS),并通过邻接表的方式存储图。 #### 邻接表存储图 邻接表是一种常用的数据结构来存储...