Boost Graph Library基础用法说明

何超英
2023-12-01

linux下安装Boost库

apt-get install libboost-dev

新建图(邻接表建图)

#include <boost/graph/adjacency_list.hpp>
using namespace boost;
int main()
{
//1.新建无向图,使用邻接矩阵数据结构
boost::adjacency_list<listS, vecS, undirectedS> g;//listS是每个顶点的链表,用于表示与该顶点相连的所有顶点
//VecS是图中顶点的动态数组集合,用于表示所有的顶点,undirectedS表示图的形式为无向图,若改为directedS则为有向图
//2.增加顶点和边方法
add_edge(0, 1, g);//第一个参数是源顶点,第二个参数是目标顶点,第三个参数是图名
add_edge(1, 4, g);
add_edge(4, 0, g);
add_edge(2, 5, g);
}

遍历顶点和边

#include <iostream> // for std::cout
#include <utility> // for std::pair
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/adjacency_list.hpp>

using namespace boost;
using namespace std;
int main()
{
    //1.新建无向图,使用邻接矩阵数据结构
  typedef adjacency_list<listS, vecS, undirectedS > Graph;
    Graph g;
    //2.增加节点和边方法
    add_edge(0, 1, g);
    add_edge(1, 4, g);
    add_edge(4, 0, g);
    add_edge(2, 5, g);
    //3.遍历点
    typedef graph_traits<Graph>::vertex_iterator vertex_iter;//顶点迭代器,用于遍历顶点,typedef定义让语句变短,简化表达
    pair<vertex_iter, vertex_iter> vip;//节点迭代器成对
    cout << "Vertices in g  = [ ";
    vip = vertices(g);					//将图g的顶点参数传递到顶点迭代器对vip里面,第一个参数指向迭代器第一个顶点,第二个参数指向迭代器最后一个顶点
    for(vertex_iter vi = vip.first; vi != vip.second; ++vi) {			//开始遍历
        cout << *vi << " ";	
    }
    cout<<"]"<<endl;
    //4.遍历边方法1
    typedef graph_traits<Graph>::edge_iterator  edge_iter ;//同遍历顶点一样,先创建遍历边的迭代器,要注意一个是edge_iterator一个是vertex_iterator
    pair<edge_iter, edge_iter> eip;	//两个迭代器打包
    eip=edges(g);								//将图g的边参数传递到创建的边迭代器对eip里面,第一个参数指向迭代器对eip第一个顶点,第二个参数指向迭代器对eip最后一个顶点
    cout << "Edge in g  = [ ";
    for(edge_iter ei = eip.first; ei != eip.second; ++ei) {//开始遍历
        //cout << *ei << " ";
        cout<<"( source edge="<< source(*ei, g) ;
        cout<< " taget edge="<<target(*ei, g) <<")"<<endl;
    }
    cout<<"]"<<endl;
    return 0;
}
 类似资料: