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

    深度优先搜索树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);
    		}
    	}
    }
    

                    

  • 相关阅读:
    VS编译 x64版本zlib库
    如何导出标准模板库(STL)类的实例化和包含STL类对象数据成员的类
    早前阅读live555源码做的笔记
    windows下 jemalloc编译
    简单的BSON OID生成实现
    Qt5.9静态库编译VS2015-x64
    [trouble shoot]atol和atoll
    LeetCode[Linked List]: Remove Duplicates from Sorted List II
    HighCharts实现多数据折线图分列显示
    用户空间驱动
  • 原文地址:https://www.cnblogs.com/Jam01/p/2991314.html
Copyright © 2011-2022 走看看