美文网首页
图的深度优先遍历(DFS)

图的深度优先遍历(DFS)

作者: czins | 来源:发表于2017-03-05 01:41 被阅读137次

    从图中的某个顶点v出发,访问此顶点,然后从v的未被访问的领接点出发深度优先遍历图,直至图中所有和v有路径相同的顶点都被访问到。

    图片.png
    /**
         * 查找某个顶点的第一个邻接点
         */
        fun getFirstNeighbor(index: Int): Int {
            matrix.getOrNull(index)?.forEachIndexed { index, i ->
                if (i in 1..(MAX_WEIGHT - 1)) {
                    return index
                }
            }
            return -1
        }
    
        /**
         * 查找某个顶点v相对于index的下一个邻接点
         */
        fun getNextNeighbor(v: Int, index: Int): Int {
            matrix.getOrNull(v)?.slice(index + 1..size - 1)?.forEachIndexed { i, d ->
                if (d in 1..(MAX_WEIGHT - 1)) {
                    return index + i + 1
                }
            }
            return -1
        }
    
        /**
         * 深度优先遍历
         */
        fun depthFirstSearch() {
            isVisited = BooleanArray(size)
            (0..size - 1).forEach {
                depthFirstSearch(it)
            }
        }
    
    private fun depthFirstSearch(index: Int) {
            if (!isVisited[index]) {
                isVisited[index] = true
                System.out.println("访问到了" + index + "顶点")
            }
            var i = getFirstNeighbor(index)
            while (i != -1) {
                if (!isVisited[i]) {
                    depthFirstSearch(i)
                }
                i = getNextNeighbor(index, i)
            }
        }
    

    相关文章

      网友评论

          本文标题:图的深度优先遍历(DFS)

          本文链接:https://www.haomeiwen.com/subject/htnjgttx.html