javascript数据结构8-图(Graph)

时间:2025-04-06 19:24:28
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);