Boost Graph Library一個通用圖庫用於C++開發人員

來源:互聯網
上載者:User
關鍵字 開發人員 C++ Library 通用圖庫

關於計算的公理表達通常頗具爭論。 然而,現代計算最重要的理論支柱之一的圖論並不是這些公理表達之一。 無數工程領域(從設計路由器和網路到設計構成行動裝置核心的晶片)都是圖論的應用。

作為 C++++ 應用程式軟體HTTP://www.aliyun.com/zixun/aggregation/7155.html">開發人員,我們通常需要直接將實際工程問題轉化成一個等價的圖論問題。 如果有一個可靠的基於 C++ 的通用圖庫,就可以説明我們實現這個轉換,這樣的圖庫顯然非常受歡迎:Boost Graph Library (BGL) 將填補這項空白。

在本文中,您首先將創建一個無向圖,然後按照常規的遍歷常式創建一個有向圖。 隨後,您可以應用一些經典演算法,所有演算法都不需要添加大量代碼。 這就是 BGL 的神奇之處。

下載和安裝

BGL 可從 Boost 網站免費下載。 BGL 是一個僅有標頭檔的庫,因此,以後在應用程式代碼中使用該庫時,需要在原始程式碼中包含相關的標頭檔。 但是 BGL 需要這個序列化庫來進行連結。 以下是一個典型的命令列格式:

root# g++ test_bgl.cpp I/usr/boost/boost_1_44/ -L/usr/boost/boost_1_44/lib

如果要試驗本文中的代碼,您需要安裝 Boost 1.44 版本。

鄰接表(Adjacency lists)

任何圖實現的標頭檔中都有一個鄰接表 (adjacency list) 或鄰接矩陣。 清單 1 顯示了在 Boost 標頭檔 adjacency_list.hpp 中如何聲明鄰接表。

清單 1. 在 Boost 中聲明一個鄰接表

template <class OutEdgeListS = vecS, // a Sequence or an AssociativeContainer class VertexListS = vecS, // a Sequence o r a RandomAccessContainer class DirectedS = directedS, class VertexProperty = no_property, class EdgeProperty = no_propert y, class GraphProperty = no_property, class EdgeListS = listS> class adjacency_list { };

為了簡便起見,我們將重點放在前三個範本參數。

OutEdgeList 範本參數決定了將用於存儲邊清單( edge-list)資訊的容器類型。 回顧一下圖論基礎知識就可以知道,對於有向圖,只具有入邊的那些頂點都有一個對應的空鄰接表。 預設值被設置為 vecS,該值對應于 std::vector。 VertexList 範本參數決定了用於表示該圖頂點清單的容器類型,預設值同樣被設置為 std::vector。 DirectedS 範本參數根據提供的值是 directedS 還是 undirectedS 來確定該圖是有向圖還是無向圖。

在 BGL 中創建一個圖

在聲明鄰接表的同時,清單 2 中的代碼在 BGL 中創建了一個簡單的無向圖,邊資訊將存儲在 std::list 中,頂點資訊存儲在 std::vector 中。

清單 2. 創建一個無向圖

#include <boost/graph/adjacency_list.hpp> using namespace boost; typedef boost::adjacency_list<listS, vecS, undirectedS> mygraph; int main() { mygraph g; add_edge (0, 1, g); add_edge (0, 3, g); add_edge (1, 2, g); add_edge (2, 3, g); }

在清單 2 中,在沒有在建構函式中提供任何頂點或邊資訊的情況下創建了圖 g。 在運行的時候,會使用諸如 add_edge 和 add_vertex 之類的説明函數創建邊和頂點。 add_edge 函數,顧名思義:在一個圖的兩個頂點之間添加一條邊。 清單 2 中的代碼執行結束後,圖 g 應該有 4 個頂點,分別標記為 0、1、2 和 3,頂點 1 與頂點 0 和頂點 2 連接,等等。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.