《图论》——广度优先遍历算法(BFS)

十大算法之广度优先遍历:

本文以实例形式讲述了基于Java的图的广度优先遍历算法实现方法,详细方法例如以下:

用邻接矩阵存储图方法:

1.确定图的顶点个数和边的个数

2.输入顶点信息存储在一维数组vet中

3.初始化邻接矩阵。

4.依次输入每条边存储在邻接矩阵array中

输入边依附的两个顶点的序号i,j。

将邻接矩阵的第i行第j列的元素值置为1;

将邻接矩阵的第j行第i列的元素值置为1;

广度优先遍历实现:

1.初始化队列Q

2.訪问顶点v;ifVisit[v]=1;顶点v入队Q;

3.while(队列Q非空)

v=队列Q的队头元素出队;

w=顶点v的第一个邻接点

while(w存在)

假设w未被訪问,则訪问顶点w;visited[w]=1;顶点w入队列Q

w=顶点v的下一个邻接点

例如以下代码參考此图完毕:

实现代码例如以下:

时间: 2024-10-12 15:45:36

《图论》——广度优先遍历算法(BFS)的相关文章

广度优先遍历算法(BFS)

十大算法之广度优先遍历: 本文以实例形式讲述了基于Java的图的广度优先遍历算法实现方法,具体方法如下: 用邻接矩阵存储图方法: 1.确定图的顶点个数和边的个数 2.输入顶点信息存储在一维数组vet中 3.初始化邻接矩阵: 4.依次输入每条边存储在邻接矩阵array中 输入边依附的两个顶点的序号i,j: 将邻接矩阵的第i行第j列的元素值置为1: 将邻接矩阵的第j行第i列的元素值置为1: 广度优先遍历实现: 1.初始化队列Q 2.访问顶点v:ifVisit[v]=1;顶点v入队Q; 3.while

饥饿的小易(枚举+广度优先遍历(BFS))

题目描述 小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃.最开始小易在一个初始位置x_0.对于小易所处的当前位置x,他只能通过神秘的力量移动到 4 * x + 3或者8 * x + 7.因为使用神秘力量要耗费太多体力,所以它只能使用神秘力量最多100,000次.贝壳总生长在能被1,000,000,007整除的位置(比如:位置0,位置1,000,000,007,位置2,000,000,014等).小易需要你帮忙计算最少需要使用多少次神秘力量就能吃到贝壳. 输入描述: 输入一个初始位置x_0

深度优先遍历(DFS)和广度优先遍历(BFS)

1 图的两种存储方式 1.1 邻接矩阵(Adjacency Matrix) 1.1.1 原理 用一维数组存储图中顶点信息:用二维数组(矩阵)存储图中的边和弧的信息.对于无向图来说,如果顶点i与顶点j之间有边,就将A[i][j]和A[j][i]标记为1:对于有向图来说,如果顶点i和顶点j之间,有一条箭头从顶点i指向顶点j的边,就将A[i][j]标记为1,有箭头从顶点j指向顶点i的边,就将A[j][i]标记为1.对于有权图,数组中存储相应权重. 邻接矩阵可表示为: vertex[4] = {v0,

如何实现广度优先遍历(BFS)

BFS过程: 一:访问顶点V,并标记V为已经访问 二:顶点V入队列 三:如果队列非空,进行执行,否则算法结束 四:出队列取得对头顶点u,如果顶点未被访问,就访问该顶点,并标记该顶点为已经访问 五:查找u的第一个邻接节点w 六:如果w不存在,则转到步骤三,否则循环执行 a. 如果w没有被访问过,则先把w入队列 b.查找顶点u的下一个邻接节点,记为w,并转到步骤六 上图使用BFS访问顺序为: A BEDC 队列的变化过程如下: A B BE ED D C 代码如下: #include<iostrea

怎样实现广度优先遍历(BFS)

BFS过程: 一:訪问顶点V,并标记V为已经訪问 二:顶点V入队列 三:假设队列非空.进行运行,否则算法结束 四:出队列取得对头顶点u,假设顶点未被訪问,就訪问该顶点,并标记该顶点为已经訪问 五:查找u的第一个邻接节点w 六:假设w不存在.则转到步骤三,否则循环运行 a. 假设w没有被訪问过.则先把w入队列 b.查找顶点u的下一个邻接节点,记为w,并转到步骤六 上图使用BFS訪问顺序为: A BEDC 队列的变化步骤例如以下: A B BE ED D C 代码例如以下: #include<ios

【数据结构-图】图的建立以及广度优先遍历算法

本文利用邻接表的方法将图进行了表示,并且利用广度优先遍历方法对图进行遍历 下面是一个图的示例: 代码如下: #include<iostream> using namespace std; typedef int VexType; typedef struct Arcnode{ VexType data; struct Arcnode *nextarc; }ArcNode; typedef struct Vexnode { VexType data; ArcNode *firstarc; }Vn

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

概述: 近期要学习写网络爬虫.所以把图的深度和广度搜索都再温习一下. 图结构展示: 实现过程: 首先,我们来看看图结构在代码中的实现.有三块逻辑: 1.图中的节点: public class GraphNode { public List<GraphEdge> edgeList = null; private String label = ""; public GraphNode(String label) { this.label = label; if (edgeLis

实验四 图的遍历算法设计与实现

一.实验名称:图的遍历算法设计与实现 二.实验目的: 1.掌握图的深度优先遍历的算法. 2.掌握图的广度优先遍历的算法. 3.实验章节:算法设计与分析 第四章 三.实验内容.实验问题和程序运行结果 第一部分 广度优先遍历算法 1. 分析Graph类,画出Graph类初始化以后的Graph对象的数据结构图. 2. 分析BFS函数,画出流程图. 3. 上述程序   int data[7][7]={{ 1,-1,-1,-1,-1,-1,-1}, { 6, 3, 2,-1,-1,-1,-1}, { 0,

数据结构(三十二)图的遍历之广度优先遍历

一.广度优先遍历算法描述 广度优先遍历(Breadth_First_Search),又称为广度优先搜索,简称BFS.图的广度优先遍历类似于树的层序遍历. BFS算法描述:从图中的某个顶点v开始,先访问该顶点,再依次访问该顶点的每一个未被访问过的邻接点w1,w2,...:然后按此顺序访问顶点w1,w2...的各个还未 被访问过的邻接点.重复上述过程,直到图中的所有顶点都被访问过为止. 以下图为例子,顶点访问序列为{A B F C I G E D H} 二.广度优先遍历算法实现 原文地址:https