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