《图论》——广度优先遍历算法(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的下一个邻接点

如下代码参考此图完成:

实现代码如下:

 

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class BFS {
 
	private Object[] vet;     //定义vet数组用来存放顶点信息
	private int[][] array;    //定义邻接矩阵存放图的顶点信息
	private int vexnum;       //存储边的条数
	private boolean[] ifVisit;//存放结点是否被访问过
	private List list = new ArrayList();   //定义一个临时的队列用来存放已经被访问过的结点
	
 public static void main(String[] args) {
// TODO Auto-generated method stub
	 BFS map = new BFS(5);
	 Character[] vet= {'A','B','C','D','E'};
	 map.addVet(vet);
	 map.addEage(0, 1);
	 map.addEage(0, 4);
	 map.addEage(1, 3);
	 map.addEage(2, 3);
	 map.addEage(2, 4);
	 
	 System.out.println("广度优先遍历开始:");
	 map.bfs();
 }
 //广度优先遍历
 public void bfs(){
	 Queue queue = new LinkedList();   //定义一个队列
	 for(int i=0;i0;m = this.next(j, m)){
					 if(!ifVisit[m]){
						 queue.add(m);
						 ifVisit[m] = true;
						 visited(m);
					 }
				 }
			 }
		 }
		 
	 }
 }
 //获得当前结点
 public int first(int i){
	 for(int j = 0;j0)
			 return j;
	 return -1;
 }
 public int next(int i,int k){
	 for (int j = k + 1; j < vexnum; j++) {
		 if (array[i][j] > 0)
		 return j;
		 }
		 return -1;
 }
//初始化图的节点
private void addVet(Object[] object) {
this.vet = object;
}
 //往临时队列里添加已经访问过的结点,并输出
 public void visited(int k){
	 list.add(vet[k]);
	 System.out.print("->" + vet[k]);
 }
 //构建邻接矩阵,保存边的信息
 public void addEage(int m,int n){
	 if(m!=n){
		 array[m][n]=1;
	     array[n][m]=1;
	 }
	 else
		 return;
 }
 //图的初始化
 public BFS(int m){
	 vexnum = m;
	 vet = new Object[m];
	 array = new int[m][m];
	 ifVisit = new boolean[m];
	 for(int i=0;i 代码不知道怎么回事丢了~~~~~

搜索与推荐Wiki

扫一扫 关注微信公众号!号主 专注于搜索和推荐系统,尝试使用算法去更好的服务于用户,包括但不局限于机器学习,深度学习,强化学习,自然语言理解,知识图谱,还不定时分享技术,资料,思考等文章!


                             【技术服务】,详情点击查看:https://mp.weixin.qq.com/s/PtX9ukKRBmazAWARprGIAg


外包服务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值