Hello小夥伴們,你們好哇~~今天要給你們帶來數據結構專題的最後一個:圖啦~剛剛忽然發現題目一直有個錯字,捶胸頓足中,居然尚未寶寶提醒我,委屈巴巴。。。不扯閒話啦,咱們先來看看圖是什麼吧~圖由邊和頂點的集合組成,html
名詞解釋算法
1)有向圖:一個圖的頂點對是有序的。微信
2)無序圖:圖是無序的。數據結構
3)簡單圖:沒有重複邊、重複頂點的圈。
this
4)強連通:兩個頂點之間有路徑。spa
圖的實現.net
下面看看圖怎麼實現吧!圖是由頂點和邊組成的,咱們首先要實現頂點,而後實現邊。code
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.showGraph = showGraph;}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) { putstr(i + " -> "); for (var j = 0; j < this.vertices; ++j ) { if (this.adj[i][j] != undefined) { putstr(this.adj[i][j] + ' '); } } print(); }}
圖的搜索orm
圖的搜索包括深度優先搜索和廣度優先搜索。htm
1)深度優先搜索算法比較簡單:訪問一個沒有訪問過的頂點,將它標記爲已訪問,再遞歸地去訪問在初始頂點的鄰接表中其餘沒有訪問過的頂點。
function dfs(v) { this.marked[v] = true; for (var w in this.adj[v]) { if (!this.marked[w]) { this.dfs(w); } }}
2)廣度優先搜索從第一個頂點開始,嘗試訪問儘量靠近它的頂點。本質上,這種搜索在圖上是逐層移動的,首先檢查最靠近第一個頂點的層,再逐漸向下移動到離起始頂點最遠的層。
function bfs(s) { var queue = []; this.marked[s] = true; queue.push(s); // 添加到隊尾 while (queue.length > 0) { var v = queue.shift(); // 從隊首移除 if (v == undefined) { } for (var w in this.adj[v]) { if (!this.marked[w]) { this.edgeTo[w] = v; this.marked[w] = true; queue.push(w); } }}
圖的應用
說了這麼多,圖可以用在哪裏呢?
1)查找最短路徑
2)拓撲排序
具體的情境還等待你們本身發揮想象力哦~想到情境也能夠後臺留言與兔妞討論喲~
好啦~今天的分享就到這裏啦~喜歡兔妞的文章就請在看+關注吧!下面要開始什麼專題呢?好糾結,不知道小夥伴們有沒有建議呢?
本文分享自微信公衆號 - 萌兔it(mengtu_it)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。