图的深度优先遍历(DFS)

从图中的某个顶点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)
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • https://zh.visualgo.net/graphds 浅谈图形结构https://zh.visualgo...
    狼之独步阅读 9,738评论 0 0
  • 图是一种比线性表和树更复杂的数据结构,在图中,结点之间的关系是任意的,任意两个数据元素之间都可能相关。图是一种多对...
    Alent阅读 6,880评论 1 22
  • 图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合...
    开心糖果的夏天阅读 4,404评论 0 9
  • -DFS(Depth First Search):深度优先搜索 访问完一个顶点的所有邻接点之后,会按原路返回,对应...
    Spicy_Crayfish阅读 7,861评论 1 0
  • 阳光为暖 清风为伴 素面为食 集天地之精华 人生如此 足矣……
    翦梦阅读 2,778评论 10 11