数据结构与算法的JavaScript描述——图和图算法
说明:以下部分均为《数据结构与算法的JavaScript描述》学习内容及笔记
1、构建图
function Graph(v){
this.vertices=v;
this.edges=0;
this.adj=[];
for(var i=0;i<this.vertices;i++){
this.adj[i]=[];
this.adj[i].push("");
}
this.addEdge=addEdge;
this.toString=toString;
}
function addEdge(v, w){
this.adj[v].push(w);
this.adj[w].push(v);
this.edges++;
}
function showGraph(){
for(var i=0;i<this.vertices;i++){
print(i + "->");
for(var j=0;j<this.vertices;j++){
if(this.adj[i][j]!=undefined){
console.log(this.adj[i][j] + " ");
}
}
}
}
2、搜索图
2.1 深度优先遍历
function Graph(v){
this.vertices=v;
this.edges=0;
this.adj=[];
for(var i=0;i<this.vertices;i++){
this.adj[i]=[];
this.adj[i].push("");
}
//新添加,标记是否被访问过
this.mark=[];
for(var i=0;i<this.vertices;i++){
this.mark[i]=false;
}
this.addEdge=addEdge;
this.toString=toString;
}
function dfs(v){
var that=this;
this.mark[v]=true;
if(this.adj[v]!=undefined){
console.log("访问:" + v);
}
this.adj[v].forEach(function(w){
if(!that.mark[w]){
that.dfs(w);
}
});
}
2.2 广度优先遍历
function bfs(v){
var that=this;
var queue=[];
this.mark[v]=true;
queue.push(v);
while(queue.length>0){
var s = queue.shift();
console.log("访问:" + s);
this.adj[s].forEach(function(w){
if(!that.mark[w]){
that.mark[w]=true;
queue.push(w);
}
});
}
}