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 設計表單。在流程管理 表單管理 ...