javascript数据结构8-图(Graph)
function Graph(v){
this.vertices=v;
this.edges=0;
this.adj=[];
for(var i=0;i<this.vertices;++i){
this.adj[i]=[];
// [i].push("");
}
this.addEdge=addEdge;
this.showGraph=showGraph;
//深度优先搜索
this.dfs=dfs;
this.marked=[];
for(var i=0;i<this.vertices;++i){
this.marked[i]=false;
}
// 广度搜索
this.bfs=bfs;
}
// 增加顶点
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){
('<br/>');
(i+"-->");
for(var j=0;j<this.vertices;++j){
if(this.adj[i][j]!=undefined){
(this.adj[i][j]+' ');
}
}
}
}
//深度优先搜索
function dfs(v){
//var w;
this.marked[v]=true;
if(this.adj[v]!=undefined){
("<br/>访问的节点:"+v);
}
// for(var w in [v]){
//([0].length);
var w=this.adj[v].shift();
while(w!=undefined){
if(!this.marked[w]){
this.dfs(w);
}
w=this.adj[v].shift();
}
//(w);
//([v]);
}
// 广度搜索
function bfs(s){
var queue=[];
this.marked[s]=true;
(s);//添加到队尾
var w; //存放邻接表
while(>0){
var v=();//从队首删除
if(v!=undefined){
("<br/>访问的节点:"+v);
}
w=this.adj[v].shift();
while(w!=undefined){
if(!this.marked[w]){
this.marked[w]=true;
(w);
}
w=this.adj[v].shift();
}
}
}
//测试
var graph=new Graph(5);
(0,1);
(0,2);
(1,3);
(2,4);
//(graph);
//();
();
("<br/>");
("======深度度优先搜索=====");
(0);
("<br/>");
("======广度优先搜索=====");
var graph1=new Graph(5);
(0,1);
(0,2);
(1,3);
(2,4);
(0);