Boost Graph Library 快速入門

2021-06-18 12:00:17 字數 2712 閱讀 8298

boost graph library 快速入門

by 燕飛龍 南亮亮

採用boost中的鄰接鍊錶:adjacency_list<> 實現圖的定義

下面是乙個鄰接鍊錶定義的例子:

#include

// 首先定義圖中節點和邊的屬性

struct vertexproperty ;

structedgeproperty

;// 圖的定義。後面兩個引數分別是節點屬性和邊屬性

typedefadjacency_listvertexproperty, edgeproperty>graph;

// 節點描述符

typedefgraph_traits::vertex_descriptorvertexdescriptor; 

// 邊描述符

typedefgraph_traits::edge_descriptor     edgedescriptor;  

// 下面是鄰接鍊錶的一些遍歷器

typedefgraph_traits::vertex_iteratorvertexiterator;

typedefgraph_traits::edge_iteratoredgeiterator;

typedefgraph_traits::adjacency_iteratoradjacencyiterator;

typedefgraph_traits::out_edge_iteratoroutedgeiterator;

關鍵操作:

1.在圖中加入節點add_vertex

()vertexpropertyvp;

vp.index = i;

vp.color = c;

add_vertex(vp, graph);

當然可以不加屬性:

add_vertex(graph)在圖中加入乙個節點,但是除了描述符沒有其它資訊。

2.在圖中加入邊add_edge

()edgepropertyep;

ep.index = i;

ep.weight = w;

add_edge(id1, id2, ep, graph); // 同樣,可以不加邊的屬性,只用三個引數。

3.

利用描述符訪問相應節點 / 邊的屬性

vertexproperty vp = graph[vd];      // vd為vertexdescriptor

const edgeproperty

& ep = graph[ed];  // ed

為edgedescriptor

4.利用節點迭代器遍歷節點。vertices

()返回迭代器的頭和尾。節點迭代器指向該節點的描述符。

std::pair

vi=vertices(graph);

for(vertexiteratorvit=vi.first; vit!=vi.second; ++vit) 

5.利用邊迭代器遍歷邊。edges()

返回迭代器的頭和尾。邊迭代器指向該邊的描述符。

std::pair

ei=edges(graph);

for(edgeiteratoreit = ei.first; eit!= ei.second; ++eit)

6.

判斷兩節點是否相鄰 / 

訪問兩相鄰節點關聯的邊

std::pair

test = 

edge

(vd1, vd2, graph);

if (test.second == true) 

7.

訪問某一節點的相鄰節點

std::pair

ai =adjacent_vertices(vd, graph);

for(adjacencyiterator

ait = ai.first; ait! = ai.second; ++ait)

Expression Blend 介面快速入門

在開始使用blend前,首先需要進行silverlight的開發環境搭建,在銀光中國網 silverlightchina.net 有篇 輕鬆建立silverlight開發環境 其中列出了建立silverlight開發環境的幾個步驟,另外,我在過去發布過一篇 silverlight開發工具集合 文章,...

tmux命令啟動MySQL tmux 快速入門

為什麼要用 tmux 如果你對 tmux 的疑問還停留在 我可以開多個 terminal 的 tab 啊,為什麼要用 tmux 呢?那我只能呵呵了。tmux 的強大之處在於 可以連線本地或遠端的 sessions 強大的 window 和 pane 管理 在不同的 session 之間移動 wind...

RoadFlowCore工作流引擎快速入門

roadflow新建乙個流程分為以下幾步 1 建表 在資料庫建一張自己的業務表 根據你自己的業務需要確定表字段,如請假流程就有,請假人 請假時間 請假天數等字段 資料表必須要有乙個主鍵,主鍵型別是 int自增,或者guid uniqueidentifier 型別 2 設計表單。在流程管理 表單管理 ...