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

  • 相关阅读:
    numpy-tutorial
    Pandas 数据分析资料
    python3 创建虚拟环境
    机器学习中的评价指标--02
    机器学习中的评价指标--01
    pytest 测试框架
    Ubuntu 添加删除用户
    VSCODE 设置护眼颜色
    信息熵、交叉熵、KL散度等等
    深度学习优化方法演变和公式理解
  • 原文地址:https://www.cnblogs.com/jpit/p/8310173.html
Copyright © 2011-2022 走看看