java常用算法之广度优先遍历
2018-03-19 10:43
232 查看
广度优先遍历思想:按层次来遍历节点结构,将每一层的节点都遍历完再继续遍历下一层
[b]广度优先遍历算法实现思想:借助队列来实现算法,在队列元素不为空的情况下,不断的弹出对首元素,在把与对首元素相邻接的节点放入队列中。
[/b]
[b][b]广度优先遍历算法实现:
[/b][/b]
import java.util.ArrayDeque;
import java.util.Queue;
//图的广度优先遍历
public class img2 {
//存储结点之间的关联信息
private int[][] img2;
//存储节点之间的信息
private char[] messag;
//存储是否被访问
private boolean[] isFlag;
//使用队列来存储广度优先遍历的结果
Queue queue = new ArrayDeque<Integer>();
//构造函数初始化
public img2(int n){
img2 = new int
;
messag = new char
;
isFlag = new boolean
;
//初始化节点之间的关系都为未连接
for(int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
img2[i][j
4000
] = 0;
}
//初始化都为为访问
isFlag[i] = false;
}
}
//设置message信息
public void setMessag(char[] messag){
this.messag = messag;
}
//设置节点之间的关系
public void setPointRelative(int i,int j){
if(i == j){
return;
}
img2[i][j] = 1;
img2[j][i] = 1;
}
//从顶点i开始进行广度优先遍历
public void bfsPoint(int i){
//当队列非空的时候,不断的把队列中的元素弹出
//在添加进入该节点相邻接的节点
while (queue.size()!=0){
int j = (Integer) queue.poll();
System.out.print(j+" ");
for(int k = 0;k<messag.length;k++){
if(img2[j][k] == 1&&isFlag[k] == false){
isFlag[k] = true;
queue.add(k);
}
}
}
}
//广度优先遍历
public void bfs(){
isFlag[0] = true;
queue.add(0);
bfsPoint(0);
}
public static void main(String a[]){
img2 img2 = new img2(5);
char[] chars = {'0','1','2','3','4'};
img2.setMessag(chars);
img2.setPointRelative(0,1);
img2.setPointRelative(0,2);
img2.setPointRelative(1,3);
img2.setPointRelative(1,4);
img2.bfs();
}
}
[b]广度优先遍历算法实现思想:借助队列来实现算法,在队列元素不为空的情况下,不断的弹出对首元素,在把与对首元素相邻接的节点放入队列中。
[/b]
[b][b]广度优先遍历算法实现:
[/b][/b]
import java.util.ArrayDeque;
import java.util.Queue;
//图的广度优先遍历
public class img2 {
//存储结点之间的关联信息
private int[][] img2;
//存储节点之间的信息
private char[] messag;
//存储是否被访问
private boolean[] isFlag;
//使用队列来存储广度优先遍历的结果
Queue queue = new ArrayDeque<Integer>();
//构造函数初始化
public img2(int n){
img2 = new int
;
messag = new char
;
isFlag = new boolean
;
//初始化节点之间的关系都为未连接
for(int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
img2[i][j
4000
] = 0;
}
//初始化都为为访问
isFlag[i] = false;
}
}
//设置message信息
public void setMessag(char[] messag){
this.messag = messag;
}
//设置节点之间的关系
public void setPointRelative(int i,int j){
if(i == j){
return;
}
img2[i][j] = 1;
img2[j][i] = 1;
}
//从顶点i开始进行广度优先遍历
public void bfsPoint(int i){
//当队列非空的时候,不断的把队列中的元素弹出
//在添加进入该节点相邻接的节点
while (queue.size()!=0){
int j = (Integer) queue.poll();
System.out.print(j+" ");
for(int k = 0;k<messag.length;k++){
if(img2[j][k] == 1&&isFlag[k] == false){
isFlag[k] = true;
queue.add(k);
}
}
}
}
//广度优先遍历
public void bfs(){
isFlag[0] = true;
queue.add(0);
bfsPoint(0);
}
public static void main(String a[]){
img2 img2 = new img2(5);
char[] chars = {'0','1','2','3','4'};
img2.setMessag(chars);
img2.setPointRelative(0,1);
img2.setPointRelative(0,2);
img2.setPointRelative(1,3);
img2.setPointRelative(1,4);
img2.bfs();
}
}
相关文章推荐
- 【Java】关于二叉树的广度优先遍历及完全二叉树判定算法
- 数据结构和算法之:图的深度优先和广度优先遍历及其Java实现
- java常用算法之字梯(广度优先搜索bfs)
- Java 二叉树广度优先遍历
- 无向连通图的广度优先遍历算法
- (百度笔试)简要说明树的深度优先、广度优先遍历算法,及非递归实现的特点
- 深度优先遍历算法和广度优先遍历算法简单图
- 数据结构—基于广度优先遍历算法的应用
- 图的遍历之深度优先搜索算法&&广度优先优先算法的实现
- (百度笔试)简要说明树的深度优先、广度优先遍历算法,及非递归实现的特点
- 图的理解:深度优先和广度优先遍历及其 Java 实现
- 算法学习 - 图的广度优先遍历(BFS) (C++)
- (算法入门)基本图论-广度优先搜索之JAVA实现
- 图 深度优先遍历 广度优先遍历 非递归遍历 图解算法过程
- Java图的建立以及深度广度优先遍历(邻接矩阵)
- Java基础 - 二叉树的遍历之广度优先遍历
- Java图以及BFS广度优先遍历
- java常用算法之树的遍历
- Java实现利用广度优先遍历(BFS)计算最短路径的方法
- 树的深度优先遍历和广度优先遍历的原理和java实现代码