boost graph lib 小試牛刀

2021-06-09 07:40:38 字數 1523 閱讀 5587

最近要做社會網路的社群發現,發現用bgl能減少不少**量。經過一番調研發現bgl封裝的很牛叉,dijkstra等演算法統統具備,奈何自己對泛型程式設計不太熟,

遇到問題還是很糾結。primer泛型程式設計、演算法部分和stl原始碼分析接下來有時間一定要讀下。

下面僅以鄰接鍊錶和自定義節點為例

typedef adjacency_list> graph;

typedef graph_traits::vertex_descriptor vertexdescriptor;

typedef graph_traits::edge_descriptor edgedescriptor;

typedef graph_traits::edge_iterator edgeiterator;

typedef graph_traits::vertex_iterator vertexiterator;

typedef std::pairedge;

型別宣告。其中node為自定義型別,property分為內部屬性和外部屬性,這樣宣告是內部屬性,將隨著graph的生命週期存在,在做社群發現時基本不需要邊的權重。

新增邊和頂點分兩種方式:

1.先新增點,再新增邊

graph g;

for (int i=0; iproperty_map::type index = get(vertex_bundle,g);

// 遍歷頂點

pairvrange = vertices(g);

for (vertexiterator iter=vrange.first; iter!=vrange.second; ++iter)

// 新增邊

vertexiterator iter=vrange.first;

add_edge(*iter,*(iter+2),1,g);

//遍歷邊

edgeiterator ei,ei_end;

for (tie(ei,ei_end)=edges(g); ei!=ei_end; ++ei)

2.直接新增邊同時就包含了頂點

graph g(vertice_num);

vectorv_nodes;

for (int i=0; i::type index = get(vertex_bundle,g);

pairvrange = vertices(g);

for (vertexiterator iter=vrange.first; iter!=vrange.second; ++iter)

edgeiterator ei,ei_end;

for (tie(ei,ei_end)=edges(g); ei!=ei_end; ++ei)

其中add_edge(edgearry[i].first,edgearry[i].second,1,g);
自定義型別編譯不過去,不懂了,求助大牛啊?

容器 模版小試

include include include include using namespace std template typename iterator traits value type findmost iterator left,iterator right else 遍歷 map ite...

Thinkphp 漏洞小試

首先確定這個 使用thinkphp的框架 國內很多php開源專案的 都是使用thinkphp框架編寫的,但是thinkphp框架有很多版本,如何才能知道我們使用的框架是哪個版本的呢?在url後面加thinkphp的目錄,也有可能爆出來 localhost index path code etc pa...

小試3解析

確實需要思考。1.傳球 細加分析即可知結果為c 3,n include includeusing namespace std int n int main 2.矩形交換 顯然直接模擬是不可取的。我們可以令a i i,表示第i行是原先的第a i 行 那麼在交換行的時候,我們只需交換對應的a的值即可。i...