• 图的深度遍历


    package japan.example.test;
    
    /**
     * 深度优先搜索遍历
     * 
     */
    public class DFSTraverse {
    
        // 构造图的边
        private int[][] edges = { //
                { 0, 1, 0, 0, 0, 1, 0, 0, 0 }, //
                
                { 1, 0, 1, 0, 0, 0, 1, 0, 1 }, //
                
                { 0, 1, 0, 1, 0, 0, 0, 0, 1 }, //
                
                { 0, 0, 1, 0, 1, 0, 1, 1, 1 }, //
                
                { 0, 0, 0, 1, 0, 1, 0, 1, 0 }, //
                
                { 1, 0, 0, 0, 1, 0, 1, 0, 0 }, //
                
                { 0, 1, 0, 1, 0, 1, 0, 1, 0 }, //
                
                { 0, 0, 0, 1, 1, 0, 1, 0, 0 }, //
                
                { 0, 1, 1, 1, 0, 0, 0, 0, 0 } };
    
        // 构造图的顶点
        private String[] vertexs = { "A", "B", "C", "D", "E", "F", "G", "H", "I" };
    
        // 记录被访问顶点
        private boolean[] verStatus;
    
        // 顶点个数
        private int vertexsNum = vertexs.length;
    
        public void DFSTra() {
            verStatus = new boolean[vertexsNum];
            for (int i = 0; i < vertexsNum; i++) {
                if (verStatus[i] == false) {
                    DFS(i);
                }
            }
        }
    
        // 递归深搜
        private void DFS(int i) {
            System.out.print(vertexs[i] + " ");
            verStatus[i] = true;
            for (int j = firstAdjVex(i); j >= 0; j = nextAdjvex(i, j)) {
                if (!verStatus[j]) {
                    DFS(j);
                }
            }
        }
    
        // 返回与i相连的第一个顶点
        private int firstAdjVex(int i) {
            for (int j = 0; j < vertexsNum; j++) {
                if (edges[i][j] > 0) {
                    return j;
                }
            }
            return -1;
        }
    
        // 返回与i相连的下一个顶点
        private int nextAdjvex(int i, int k) {
            for (int j = (k + 1); j < vertexsNum; j++) {
                if (edges[i][j] == 1) {
                    return j;
                }
            }
            return -1;
        }
    
        // 测试
        public static void main(String[] args) {
            new DFSTraverse().DFSTra();
        }
    
    }

     图的概念:https://www.cnblogs.com/Braveliu/archive/2013/12/03/3455442.html

  • 相关阅读:
    在网页上下载文件
    sql server 分离附加
    在vue中,ref属性与$refs对象的区别
    在ES6中,export default 和 export的区别
    element-ui之Table表格el-table标签
    element-ui之Form表单el-form标签
    使用Mybatis-Generator自动生成Dao,Entity,Mapping
    linux下普通用户与root的切换
    idea插件将下划线转驼峰形式
    利用wsdl2java工具生成webservice的客户端代码
  • 原文地址:https://www.cnblogs.com/jpit/p/8310173.html
Copyright © 2020-2023  润新知