介绍java中的广度优先搜索

广度优先搜索(BFS)是一种图形搜索算法,用于在树或图形结构的搜索中遍历或查找。广度优先搜索从根节点(或任何起始节点)开始遍历图形,首先访问该节点的所有子节点,然后再访问这些子节点的子节点,以此类推,直到访问到所有可到达的节点为止。BFS算法的特点是宽度优先,即先访问离根节点最近的节点。

在Java中实现BFS算法,可以使用队列来存储要访问的节点。首先将起始节点放入队列中,然后循环进行以下操作:

  1. 从队列中取出一个节点。
  2. 访问该节点,并将所有子节点加入队列中。
  3. 如果队列不为空,返回第1步。

BFS算法可以用来解决许多问题,如找到两个节点之间的最短路径、判断一个图形是否是二分图、在迷宫中找到从起点到终点的最短路径等。

以下是Java中实现BFS算法的示例代码:

import java.util.*;

public class BFS {
    public static void main(String[] args) {
        Map<Integer, List<Integer>> graph = new HashMap<>();
        graph.put(1, Arrays.asList(2, 3));
        graph.put(2, Arrays.asList(4, 5));
        graph.put(3, Arrays.asList(6, 7));
        graph.put(4, Arrays.asList(8, 9));
        graph.put(5, Collections.singletonList(10));
        graph.put(6, Collections.emptyList());
        graph.put(7, Collections.emptyList());
        graph.put(8, Collections.emptyList());
        graph.put(9, Collections.emptyList());
        graph.put(10, Collections.emptyList());
        List<Integer> visited = bfs(graph, 1);
        System.out.println(visited);
    }

    private static List<Integer> bfs(Map<Integer, List<Integer>> graph, int start) {
        Queue<Integer> queue = new LinkedList<>();
        Set<Integer> visited = new HashSet<>();
        List<Integer> order = new ArrayList<>();
        queue.offer(start);
        visited.add(start);
        while (!queue.isEmpty()) {
            int node = queue.poll();
            order.add(node);
            for (int neighbor : graph.get(node)) {
                if (!visited.contains(neighbor)) {
                    queue.offer(neighbor);
                    visited.add(neighbor);
                }
            }
        }
        return order;
    }
}

在此示例代码中,我们定义了一个图形并使用BFS算法访问它。该图形由一个Map<Integer, List<Integer>>类型的变量graph表示,其中整数表示节点的id,List<Integer>表示与该节点相连的所有节点的id列表。例如,节点1连接着节点2和节点3,因此graph.get(1)将返回[2, 3]。

在bfs方法中,我们使用队列来存储要访问的节点。首先将起始节点放入队列中,并将其标记为已访问。然后循环进行以下操作:

  1. 从队列中取出一个节点。
  2. 访问该节点,并将该节点的所有相邻节点加入队列中(如果这些节点尚未被访问)。
  3. 如果队列不为空,返回第1步。

在每次访问节点时,我们还将该节点的id添加到order列表中,以记录访问节点的顺序。最后,我们返回该列表作为结果。

在上述示例代码中,bfs方法的输出结果为[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],即按照BFS算法的顺序访问了图形中的所有节点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值