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