Using boost graph library: how to create a graph by reading edge lists from file

前端 未结 1 2001
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-06 18:47

I\'m new to boost graph library and I\'d like to create a graph by reading edge lists from a file.

A sample of the edge_list.dat file is this:



        
相关标签:
1条回答
  • 2020-12-06 19:23

    Soooo. Ambitious, huh :)

    Boost Graph library. And text parsing. Let's see what we can do: Boost Graph + Boost Spirit Qi = nice teamwork.

    See it Live On Coliru

    #include <boost/fusion/adapted/std_pair.hpp>
    #include <boost/spirit/include/qi.hpp>
    #include <boost/graph/edge_list.hpp>
    #include <fstream>
    
    typedef std::pair<int,int> Edge;
    typedef std::vector<Edge> EdgeList;
    typedef boost::edge_list<EdgeList::iterator> Graph;
    
    namespace qi = boost::spirit::qi;
    
    int main()
    {
        std::ifstream ifs("input.txt");
        ifs >> std::noskipws;
    
        boost::spirit::istream_iterator f(ifs), l;
    
        std::vector<Edge> edges;
        bool parse_ok = qi::phrase_parse(f, l, (qi::int_ >> qi::int_) % qi::eol, qi::blank, edges);
    
        Graph g(edges.begin(), edges.end());
    
        if (parse_ok)
        {
            std::cout << "Graph parsed with " << num_edges(g) << " edges\n";
        } else
            std::cout << "Parse error\n";
    
        if (f!=l)
            std::cout << "Remaining unparsed input: '" << std::string(f,l) << "'\n";
    }
    

    Prints (for the valid input lines above):

    Graph parsed with 5 edges
    Remaining unparsed input: '
    '
    
    0 讨论(0)
提交回复
热议问题