数据结构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>
相关文章
|
24天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
56 1
|
2月前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
32 1
|
2月前
|
存储 算法 索引
HashMap底层数据结构及其增put删remove查get方法的代码实现原理
HashMap 是基于数组 + 链表 + 红黑树实现的高效键值对存储结构。默认初始容量为16,负载因子为0.75。当存储元素超过容量 * 负载因子时,会进行扩容。HashMap 使用哈希算法计算键的索引位置,通过链表或红黑树解决哈希冲突,确保高效存取。插入、获取和删除操作的时间复杂度接近 O(1)。
32 0
|
2月前
|
存储 算法
数据结构与算法学习十六:树的知识、二叉树、二叉树的遍历(前序、中序、后序、层次)、二叉树的查找(前序、中序、后序、层次)、二叉树的删除
这篇文章主要介绍了树和二叉树的基础知识,包括树的存储方式、二叉树的定义、遍历方法(前序、中序、后序、层次遍历),以及二叉树的查找和删除操作。
31 0
|
2月前
05(数据结构考研)树相关操作代码
05(数据结构考研)树相关操作代码
31 0
|
2月前
|
算法
04(数据结构考研)串相关操作代码
04(数据结构考研)串相关操作代码
21 0
|
2月前
03(数据结构考研)队列相关操作代码
03(数据结构考研)队列相关操作代码
43 0
|
2月前
02(数据结构考研)栈相关操作代码
02(数据结构考研)栈相关操作代码
14 0
|
1月前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
196 9
|
1月前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
32 1