您的位置:首页 > 编程语言 > Java开发

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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: