zoukankan      html  css  js  c++  java
  • 图的深度遍历

    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

  • 相关阅读:
    vue 将毫秒转为日期
    element-ui 点击获取table的行索引
    LInux设置tomcat端口为80
    java引用传递和值传递
    java包装类的自动装箱及缓存
    理解JVM之java内存模型
    理解JVM之类加载机制
    理解JVM之内存分配以及分代思想实现
    理解JVM之垃圾回收
    理解JVM之对象的生命周期
  • 原文地址:https://www.cnblogs.com/jpit/p/8310173.html
Copyright © 2011-2022 走看看