• 图,深度,广度优先遍历(二)


    深度优先搜索树DFS

    算法:step1 选取图中的一个点(Vertex) v,将与该点v相邻的其余所有点存放至neighbours.get(v)中。

                     isVisited数组用来判断该点是否已遍历,isVisited[v] = true;

            step2 递归方法

                     dfs(v,parent,serachOrders);

                     parent为int[]数组,parent[i]表示i点的父亲节点。

                     searchOrders为一个ArrayList<Integer>数组,为遍历路径。

                     每次递归开始,searchOrders.add(v),isVisited[v] = true;

                     将v所有相邻节点i进行判断,若未被访问过,即!isVisited[i],则其父亲点parent[i] = v;

                     递归dfs(i,parent,searchOrders);

    代码:

    public Tree dfs(int v) {
    	List<Integer> searchOrders = new ArrayList<Integer>();
    	int[] parent = new int[vertices.size()];
    	for (int i = 0; i < parent.length; i++)
    		parent[i] = -1; // init parent array;
    	
    	boolean[] isVisited = new boolean[vertices.size()];
    	
    	dfs(v, parent, searchOrders, isVisited);
    	
    	return new Tree(v,parent,searchOrders);
    }
    
    private void dfs(int v, int[] parent, List<Integer> searchOrders, boolean[] isVisited) {
    	searchOrders.add(v);
    	isVisited[v] = true;
    	
    	for (int i:neighbours.get(v)) {
    		if (!isVisited[i]) {
    			parent[i] = v;
    			dfs(i,parent,searchOrders,isVisited);
    		}
    	}
    }
    

                    

  • 相关阅读:
    Python 文件的输入与输出
    php获取客户端真实ip
    php设计模式(3)-观察者模式
    php设计模式(2)-单例模式
    php设计模式(1)-工厂模式
    设计模式
    设计模式-观察者模式
    include和require的区别
    php分页类
    反向Ajax,第5部分:事件驱动的Web开发
  • 原文地址:https://www.cnblogs.com/Jam01/p/2991314.html
Copyright © 2020-2023  润新知