zoukankan      html  css  js  c++  java
  • 图,深度,广度优先遍历(三)

    广度优先搜索树BFS

    算法(队列实现):

    同深度优先搜索,需要一个ArrayList<Integer> searchOrders存放路径;

    一个int[]数组parent存放父亲节点;

    一个boolean[]数组isVisited标记节点是否被访问过;

    另外,不同于深度优先搜索,前文中深度优先搜索是以递归形式来实现(其实用栈亦可以实现),广度优先搜索用

    队列实现,所以需要一个链表LinkedList<Integer> queue存放处理节点的优先顺序;

    step1 将起始节点v放入队列,queue.offer(v),并且isVisited[v] = true;

    step2 队列不为空的情况下,循环:

             队首节点u出列 int u = queue.poll();

             将队首节点u加入searchOrders, searchOrders.add(u);

             将所有相邻节点进行处理,若该相邻节点未被访问过,则:

                1.父亲数组parent进行赋值为u;

                2.将相邻节点放入队列queue;

                3.访问标记isVisited = true;

    代码:

    public Tree bfs(int v) {
    	boolean[] isVisited = new boolean[vertices.size()];
    	int[] parent = new int[vertices.size()];
    	List<Integer> searchOrders =new ArrayList<Integer>();
    	for (int i = 0; i < parent.length; i++) 
    		parent[i] = -1;
    	
    	java.util.LinkedList<Integer> queue = new java.util.LinkedList<Integer>();
    	queue.offer(v);
    	isVisited[v] = true;
    	while (!queue.isEmpty()) {
    		int u = queue.poll();
    		searchOrders.add(u);
    		for (int w:neighbours.get(u)) {
    			if (!isVisited[w]) {
    				parent[w] = u;
    				queue.offer(w);
    				isVisited[w] = true;
    			}
    		}
    	}
    	return new Tree(v,parent,searchOrders);
    }
    
  • 相关阅读:
    docker 安装部署 mysql(配置文件启动)
    mac Charles抓包
    docker 安装部署 redis(配置文件启动)
    安装mysql5.6
    Linux命令
    git命令汇总
    Java程序占用的内存可能会大于Xmx
    排序
    二分查找
    Elasticsearch核心技术(一):Elasticsearch环境搭建
  • 原文地址:https://www.cnblogs.com/Jam01/p/2991355.html
Copyright © 2011-2022 走看看