数据结构198-图论-广度优先搜索实现代码

<!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"

                }
            }
        }
    </script>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值