最近要做社會網路的社群發現,發現用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...