数据结构200-图论-深度优先遍历实现代码 原创

简介: 数据结构200-图论-深度优先遍历实现代码 原创
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
          function Queue(){
            this.items=[]
            Queue.prototype.push=function(element){
                this.items.push(element)
            }
            Queue.prototype.shift=function(){
               return this.items.shift()
            }
            Queue.prototype.front=function(){
                return this.items[0]
            }
            Queue.prototype.isEmpty=function(){
                return this.items.length==0
            }
            Queue.prototype.size=function(){
                return this.items.length
            }
            Queue.prototype.toString=function(){
                var resultString=""
                for(var i=0;i<this.items.length;i++){
                    resultString+=this.items[i]+""
                }
                return resultString
            }
        }
        function Graph(){
            this.vertexes=[] //顶点
            this.edges=new Dictionay() //边
            Graph.prototype.addVertexts=function(v){
                this.vertexes.push(v)
                this.edges.set(v,[])
            }
            Graph.prototype.addEdge=function(v1,v2){
                this.edges.get(v1).push(v2)
                this.edges.get(v2).push(v1)
            }
            Graph.prototype.toString=function(){
                var resultString=""
                for(var i=0;i<this.vertexes.length;i++ ){
                    resultString+=this.vertexes[i]+"->"
                    var vEdges=this.edges.get(this.vertexes[i])
                    for(var j=0;j<vEdges.length;j++){
                        resultString+=vEdges[j]+" "
                    }
                    resultString+="\n"
                }
                return resultString
            }
            //初始化状态颜色
            Graph.prototype.initializeColor=function(){
                var colors=[]
                for(var i=0;i<this.vertexes.length;i++){
                    colors[this.vertexes[i]]="while"
                }
                return colors
            }
            //
            Graph.prototype.bfs=function(initV,handler){
                //初始化样式
                var colors=this.initializeColor()
                //创建队列
                var queue=new Queue()
                //将顶点加入到队列中
                queue.enqueue=(initV)
                //
                while(!queue.isEmpty()){
                    //从队列取出一个面点
                    var v=queue.dequeue()
                    //获取和顶点相邻的另外顶点
                    var vList=this.edges.get(v)
                    //将v的颜色设置未灰色
                    colors[v]="gray"
                    //遍历所有的顶点
                    for(var i=0;i<vList.length;i++){
                        var e=vList[i]
                        if(colors[e]=="white"){
                            colors[e]="gray"
                            queue.enqueue(e)
                        }
                    }
                    //v已经被探测
                    handler(v)
                    //颜色设置未黑色
                    colors[v]="black"
                }
            }
            Graph.prototype.dfs=function(initV,handler){
                //1初始化颜色
                //初始化颜色
                var colors=this.initializeColor()
                //从某个顶点开始一次递归访问
            }
            Graph.prototype.dfsVisit=function(v,colors,handler){
                //将设置
                colors[v]="gray"
                //
                handler(v)
                //
                var vList=this.edges.get(v)
                for(var i=0;i<vList.length;i++){
                    var e=vList[i]
                    if(colors[e]=="white"){
                        this.dfsVisit(e,colors,handler)
                    }
                }
                //将v设置成黑色
                colors[v]="block"
            }
        }
    </script>
</body>
</html>
相关文章
|
6月前
|
前端开发 Java
java实现队列数据结构代码详解
本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
178 1
|
9月前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
289 3
|
9月前
|
数据采集 存储 算法
【C++数据结构——图】图的遍历(头歌教学实验平台习题) 【合集】
本文介绍了图的遍历算法,包括深度优先遍历(DFS)和广度优先遍历(BFS)。深度优先遍历通过递归方式从起始节点深入探索图,适用于寻找路径、拓扑排序等场景;广度优先遍历则按层次逐层访问节点,适合无权图最短路径和网络爬虫等应用。文中提供了C++代码示例,演示了如何实现这两种遍历方法,并附有测试用例及结果,帮助读者理解和实践图的遍历算法。
352 0
|
11月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
310 1
|
12月前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
122 1
|
存储 算法 索引
HashMap底层数据结构及其增put删remove查get方法的代码实现原理
HashMap 是基于数组 + 链表 + 红黑树实现的高效键值对存储结构。默认初始容量为16,负载因子为0.75。当存储元素超过容量 * 负载因子时,会进行扩容。HashMap 使用哈希算法计算键的索引位置,通过链表或红黑树解决哈希冲突,确保高效存取。插入、获取和删除操作的时间复杂度接近 O(1)。
239 0
|
存储 算法
数据结构与算法学习十六:树的知识、二叉树、二叉树的遍历(前序、中序、后序、层次)、二叉树的查找(前序、中序、后序、层次)、二叉树的删除
这篇文章主要介绍了树和二叉树的基础知识,包括树的存储方式、二叉树的定义、遍历方法(前序、中序、后序、层次遍历),以及二叉树的查找和删除操作。
243 0
05(数据结构考研)树相关操作代码
05(数据结构考研)树相关操作代码
80 0
|
算法
04(数据结构考研)串相关操作代码
04(数据结构考研)串相关操作代码
57 0
|
11月前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
237 59

热门文章

最新文章