`
The_Apocalypse
  • 浏览: 7675 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

算法:BFS 广度优先遍历

 
阅读更多

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

 

  • 大小: 5.7 KB
  • 大小: 6.2 KB
  • 大小: 6.5 KB
分享到:
评论

相关推荐

    图的深度优先遍历和广度优先遍历算法

    图的深度遍历和广度遍历是两个重要的算法,这也是我们理解并掌握图这一数据结构的基础。通过此程序算法可以进一步掌握图的构造以及遍历的相关知识。 图的深度优先遍历算法 图的深度优先遍历(Depth-First Search,...

    无向图建立、深度优先遍历和广度优先遍历实现算法[借鉴].pdf

    广度优先遍历(Breadth-First Search,BFS)是一种遍历无向图的算法。它的基本思想是从某个顶点开始,沿着图的边水平遍历图,直到所有顶点都被访问过为止。 在本文中,我们使用队列来实现广度优先遍历。队列的基本...

    图的创立数据结构对其进行深度优先遍历和广度优先遍历

    接下来,我们讨论深度优先遍历(DFS)和广度优先遍历(BFS)算法。 **深度优先遍历(DFS)** 是一种递归策略,从给定的起点开始,尽可能深地探索图的分支,直到到达叶子节点,然后回溯。在给定的代码中,`dfs` 函数...

    图的深度、广度优先遍历(c语言)

    4. **广度优先遍历**:`bfs`函数实现了BFS算法,通过队列来管理待访问的顶点。 5. **辅助函数**:`InitQueue`用于初始化队列,`EnQueue`用于向队列中添加元素,`DeQueue`用于从队列中移除元素,`QueueEmpty`用于判断...

    图的深度优先遍历与广度优先遍历(C语言实现)

    本篇文章将深入探讨两种主要的图遍历算法:深度优先遍历(DFS,Depth-First Search)和广度优先遍历(BFS,Breadth-First Search),并提供C语言的实现。 **深度优先遍历(DFS)** 深度优先遍历是一种递归的策略,...

    邻接表或者邻接矩阵为存储结构实现连通无向图的深度优先和广度优先遍历

    在这个程序设计任务中,我们需要实现的是连通无向图的深度优先遍历(DFS)和广度优先遍历(BFS),这两种遍历方法是图算法的基础。无向图指的是图中的边没有方向,即任意两个节点之间可以双向连接。 1. **邻接表和...

    Graph1_非递归算法进行深度优先遍历和广度优先遍历_

    本话题主要探讨如何使用非递归算法对无向图进行深度优先遍历(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算法、 链表.zip

    本压缩包提供了一份针对新手学习C语言实现数据结构和算法的资源,特别关注了图的深度优先遍历与广度优先遍历、二叉查找树、二叉树、堆排序算法以及KMP算法。以下是这些知识点的详细说明: 1. **图的深度优先遍历...

    图的建立及深度优先遍历和广度优先遍历

    广度优先遍历 (BFS) **广度优先遍历**是从一个顶点开始,先访问它的所有邻接顶点,再依次访问这些邻接顶点的所有未访问过的邻接顶点,以此类推。 给定的代码实现了一个BFS算法: 1. 初始化一个布尔数组`visited`...

    图的深度、广度优先遍历(c语言).rar

    在这个压缩包中,包含了一个用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 深度优先遍历、广度优先遍历、最短路径、最小生成树

    本文将深入探讨Java中实现的四个核心图算法:深度优先遍历(DFS)、广度优先遍历(BFS)、最短路径算法以及最小生成树算法。 首先,**深度优先遍历(DFS)**是一种用于遍历或搜索树或图的算法。它从根节点开始,尽...

    图的深度优先遍历和广度优先遍历

    本文将重点介绍两种常用的图遍历算法:深度优先遍历(Depth First Search, DFS)和广度优先遍历(Breadth First Search, BFS),并通过邻接表的方式存储图。 #### 邻接表存储图 邻接表是一种常用的数据结构来存储...

Global site tag (gtag.js) - Google Analytics