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

                    

  • 相关阅读:
    bootstrap添加多个模态对话框支持
    突然想写书
    几个常用的内存、CPU飙高 分析工具
    steeltoe学习
    thrift简单使用
    记一次线上Mysql数据库 宕机
    .NetCore 开发生产环境项目前的思考&&踩坑
    SOA(面向服务架构)——踩坑后反思:这样值得吗?
    ProtoBuf与Newtonsoft序列化反序列化性能对比
    SimpleInjector 简单使用
  • 原文地址:https://www.cnblogs.com/Jam01/p/2991314.html
Copyright © 2011-2022 走看看