bfs java_算法学习java-广度优先搜索算法(BFS)

本文介绍了如何使用Java实现广度优先搜索(BFS)算法。通过创建一个Node类来存储节点信息,并利用队列进行节点的访问。算法从给定的二维数组的起始位置开始,遍历所有相邻节点,直至访问完整个数组。示例代码展示了具体实现过程,并打印了遍历路径。
摘要由CSDN通过智能技术生成

最近在学习算法,刚开始简单的时候有很多的例子和大神们写的博客可以参考,到后面越来难得时候虽然也有很多的博客可以参考,但自己水平有限,对c++不太了解,也不能为了学算法先把c++语言再学一遍。今天终于把这个拿下来了

广度优先搜索算法

广度优先搜索算法是先访问图中的一个节点,然后再访问所有和它相邻的符合条件的节点依次往后直到访问完图中所有的节点。

这些理论知识网上一搜都是一大把,就不详细赘述了。

/*

*访问所有数组里的值

*/

import java.util.LinkedList;

import java.util.Queue;

public class 广度优先搜索算法 {

private int r=4;//行

private int c=4;//列

//数组

private int[][] graph=new int[][]{{1,2,3,4},

{5,6,7,8},

{9,10,11,12},

{13,14,15,16}};

private int[][] gr=new int[r][c];//标记

int[][] rc=new int[][]{{0,-1},{-1,0},{0,1},{1,0}};//左上右下,四个方向

public static void main(String[] args) {

new 广度优先搜索算法().BFS();

}

//方法内部类,定义数据结构

class Node{

int r;//行

int c;//列

int k;//第几波被访问的

Node(int r,int c,int k){

this.r=r;

this.c=c;

this.k=k;

}

}

private void BFS() {

// TODO Auto-generated method stub

Node node=new Node(0,0,0);//初始化,从0,0开始,

gr[0][0]=1;//0,0默认已访问过

Queue que=new LinkedList();//初始化队列

que.offer(node);//把初始化过的node传入队列

while (!que.isEmpty()) {

Node tem=que.poll();//获取并移除队列头

for(int i=0;i<4;i++){//循环四次,四个方向

int newr=tem.r+rc[i][0];//新的行

int newc=tem.c+rc[i][1];//新的列

if(newr<0||newc<0||newr>=r||newc>=c)continue;//如果新的行和列超出范围就跳过这次循环

if(gr[newr][newc]!=0)continue;//如果新的节点已被访问也跳过此次循环

gr[newr][newc]=1;//标记当前节点已被访问

que.offer(new Node(newr,newc,tem.k+1));//加入队列

//输出遍历到数组的值

System.out.println(graph[newr][newc]+" "+(tem.k+1));

}

}

}

}

运行结果

b3b5710b6174b3bab20334cd285d6054.png

打开App,阅读手记

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值