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);
    		}
    	}
    }
    

                    

  • 相关阅读:
    Leetcode Reverse Words in a String
    topcoder SRM 619 DIV2 GoodCompanyDivTwo
    topcoder SRM 618 DIV2 MovingRooksDiv2
    topcoder SRM 618 DIV2 WritingWords
    topcoder SRM 618 DIV2 LongWordsDiv2
    Zepto Code Rush 2014 A. Feed with Candy
    Zepto Code Rush 2014 B
    Codeforces Round #245 (Div. 2) B
    Codeforces Round #245 (Div. 2) A
    Codeforces Round #247 (Div. 2) B
  • 原文地址:https://www.cnblogs.com/Jam01/p/2991314.html
Copyright © 2011-2022 走看看