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

  • 相关阅读:
    Eclipse的安装及汉化图解
    Intent常用使用汇总
    Android Notification (转)
    垃圾回收
    svn常见错误汇总
    位运算
    FusionCharts简单教程(一)---建立第一个FusionCharts图形
    Delphi发送邮件...
    协程库的一些笔记
    学习日记之单例模式和Effective C++
  • 原文地址:https://www.cnblogs.com/jpit/p/8310173.html
Copyright © 2011-2022 走看看