圖的表示javascript

來源:互聯網
上載者:User

標籤:

         乍一看,圖和樹或者二叉樹很像,但是採用基於對象的方式來構建就會有問題,因為圖可能會增長到非常大,用對象來表示就會使效率低下。

         首先我們需要定義一個圖的類,其中通過adj數組來表示鄰接表,也就是與節點相關聯的節點數組;marked數組則是用來表示該節點是否被訪問過,是在深度優先搜尋和廣度優先搜尋中用到的。

function Graph(v){//圖類this.vertices=v;//結點數this.edges=0;//邊數this.adj=[];//數組存放頂點數量for(var i=0;i<this.vertices;i++){this.adj[i]=[];//子數組儲存相鄰頂點}this.addEdge=addEdge;//添加邊this.showGraph=showGraph;//顯示圖this.dfs=dfs;//深度優先搜尋this.bfs=bfs;//廣度優先搜尋this.marked=[];//標識位元組for(var i=0;i<this.vertices;i++){//給所有結點添加未訪問過的標識位this.marked[i]=false;}}

然後需要定義一個函數來添加雙邊關係,代碼如下:

function addEdge(v,w){//添加邊this.adj[v].push(w);//將w添加到v的相鄰頂點列表this.adj[w].push(v);//將v添加到w的相鄰頂點列表this.edges++;//邊數加一}

接下來定義一個顯示圖關係的函數,代碼如下:

function showGraph(){//顯示圖for(var i=0;i<this.vertices;i++){document.write(i+"->");for(var j=0;j<this.vertices;j++){if(this.adj[i][j]!=undefined){//顯示和該結點相鄰的結點document.write(this.adj[i][j]+" ");}}document.write("<br>");}}

下面就可以來進行測試了:

g=new Graph(5);g.addEdge(0,1);g.addEdge(0,2);g.addEdge(1,3);g.addEdge(2,4);g.showGraph();

實驗結果為:

    //結果

    //  0-> 1 2

    //  1-> 0 3

    //  2-> 0 4

    //  3-> 1

// 4-> 2

一個圖就表示出來啦。下一節會講到廣度優先和深度優先搜尋的實現。




圖的表示javascript

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.