By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
425,743 Members | 1,028 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 425,743 IT Pros & Developers. It's quick & easy.

Problem in creating Graph Object using Boost Graph Library

100+
P: 151
I have created Graph object without vertex and edge property.It is working fine.

#include <boost/config.hpp>
#include <iostream>
#include <vector>
#include <string>
#include <boost/graph/adjacency_list.hpp>
#include <boost/tuple/tuple.hpp>
#include <set>
using namespace std;
using namespace boost;
class hello
{
public:
typedef adjacency_list<> Graph;

Graph create_Graph(vector <int> s1,vector <int> s2,int count_vetices)
{
typedef adjacency_list <>Graph;
Graph g(count_vetices);
for (unsigned int i = 0; i < s1.size(); i++)
{
add_edge(s1[i], s2[i], g);
}
return g;
}

int no_of_elements(vector<int> v2,vector<int> v3)
{
vector<int> v4;
for (unsigned int i = 0; i < v2.size(); i++)
{
v4.push_back(v2[i]);
v4.push_back(v3[i]);
}
std::set< int, std::less< int > > doubleSet( v4.begin(), v4.end());;
return doubleSet.size();
}

void get_adjacencyList(const Graph&g)
{
int name[]={0,1,2,3,4,5,6,7,8,9};
graph_traits < adjacency_list <> >::vertex_iterator i, end;
graph_traits < adjacency_list <> >::adjacency_iterator ai, a_end;
property_map < adjacency_list <>, vertex_index_t >::type
index_map = get(vertex_index, g);

for (tie(i, end) = vertices(g); i != end; ++i)
{
std::cout << name[get(index_map, *i)];
tie(ai, a_end) = adjacent_vertices(*i, g);
if (ai == a_end)
std::cout << " no children";
else
std::cout << " is the parent of ";
for (; ai != a_end; ++ai)
{
std::cout << name[get(index_map, *ai)];
if (boost::next(ai) != a_end)
std::cout << ", ";
}
std::cout << std::endl;
}
}

};
int main()
{
using namespace boost;
hello h;
typedef adjacency_list <>Graph;
vector<int> s1,s2;
s1.push_back(1);
s1.push_back(2);
s1.push_back(3);
s1.push_back(4);
s1.push_back(5);
s1.push_back(6);
s2.push_back(7);
s2.push_back(8);
s2.push_back(4);
s2.push_back(1);
s2.push_back(9);
s2.push_back(5);
int n=h.no_of_elements(s1,s2);
cout<<"no of elements ="<< h.no_of_elements(s1,s2)<<endl;
Graph g = h.create_Graph(s1,s2,n);////////////////getting graph object
h.get_adjacencyList(g);
return EXIT_SUCCESS;
}



But when i am trying with vertex and edge property.


#include <boost/config.hpp>
#include <iostream>
#include <vector>
#include <utility>
#include <string>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graph_utility.hpp>
#include <boost/property_map.hpp>
#include "ed.h"
#include "ve.h"
using namespace boost;
using namespace std;
class Network
{
public:
typedef adjacency_list<boost::vecS, boost::listS, boost::undirectedS, ve::VertexProperties, ed::EdgeProperties> Graph;
Graph create_graph(int s1[],int s2[],int s3[])
{
typedef adjacency_list<boost::vecS, boost::listS, boost::undirectedS, ve::VertexProperties, ed::EdgeProperties> Graph;
const int V = 50;
Graph g(V);
property_map<Graph, std::size_t ve::VertexProperties::*>::type
id = get(&ve::VertexProperties::index, g);
property_map<Graph, std::string ed::EdgeProperties::*>::type
name = get(&ed::EdgeProperties::name, g);
boost::graph_traits<Graph>::vertex_iterator vi, viend;
int vnum = 0;
for (boost::tie(vi,viend) = vertices(g); vi != viend; ++vi)
id[*vi] = vnum++;
for (int i = 0; i <40 ; i++)
{
if(s3[i]==1){
add_edge(vertex(s1[i], g), vertex(s2[i], g), ed::EdgeProperties("single bond"), g);
}
if(s3[i]==2)
{
add_edge(vertex(s1[i], g), vertex(s2[i], g), ed::EdgeProperties("double bond"), g);
}
if(s3[i]==3){
add_edge(vertex(s1[i], g), vertex(s2[i], g), ed::EdgeProperties("triple_bond"), g);
}
}
return g;
}

void get_edges( Graph g)
{
property_map<Graph, std::size_t ve::VertexProperties::*>::type id = get(&ve::VertexProperties::index, g);
property_map<Graph, std::string ed::EdgeProperties::*>::type name = get(&ed::EdgeProperties::name, g);
boost::graph_traits<Graph>::vertex_iterator vi, viend;
int vnum = 0;
for (boost::tie(vi,viend) = vertices(g); vi != viend; ++vi)
id[*vi] = vnum++;
graph_traits<Graph>::vertex_iterator i, end;
graph_traits<Graph>::out_edge_iterator ei, edge_end;
for (boost::tie(i,end) = vertices(g); i != end; ++i)
{
cout << id[*i] << " ";
for (boost::tie(ei,edge_end) = out_edges(*i, g); ei != edge_end; ++ei)
cout << " --" << name[*ei] << "--> " << id[target(*ei, g)] << " ";
cout << endl;
}
print_edges(g, id);
}

};



int main(int , char* [])
{
Network h;
typedef adjacency_list<boost::vecS, boost::listS, boost::undirectedS, ve::VertexProperties, ed::EdgeProperties> Graph;
int s1[]={1,1,2,2,3,3,4,4,5,5,6,6,6,7,7,7,8,8,8,8,9,9,10,1 0,11,11,12,12,13,14,17,19,19,19,20,20,20,21,21,21} ;
int s2[]={13,19,14,20,15,21,16,18,17,18,16,27,28,18,38,39, 9,10,22,23,11,12,16,17,14,24,13,25,15,15,26,29,30, 31,32,33,34,35,36,37};
int s3[]={1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2, 1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1};
Graph obj= h.create_graph(s1,s2,s3);
h.get_edges(obj);
return 0;
}


It is giving error.
/usr/include/boost/graph/detail/adjacency_list.hpp:986: instantiated from ‘std::pair<typename Config::edge_descriptor, bool> boost::add_edge(typename Config::vertex_descriptor, typename Config::vertex_descriptor, boost::undirected_graph_helper<C>&) [with Config = boost::detail::adj_list_gen<boost::adjacency_list< boost::vecS, boost::listS, boost::undirectedS, ve::VertexProperties, ed::EdgeProperties, boost::no_property, boost::listS>, boost::listS, boost::vecS, boost::undirectedS, boost::property<boost::vertex_bundle_t, ve::VertexProperties, boost::no_property>, boost::property<boost::edge_bundle_t, ed::EdgeProperties, boost::no_property>, boost::no_property, boost::listS>::config]’

/usr/include/boost/graph/detail/adjacency_list.hpp:986: instantiated from ‘std::pair<typename Config::edge_descriptor, bool> boost::add_edge(typename Config::vertex_descriptor, typename Config::vertex_descriptor, boost::undirected_graph_helper<C>&) [with Config = boost::detail::adj_list_gen<boost::adjacency_list< boost::vecS, boost::listS, boost::undirectedS, ve::VertexProperties, ed::EdgeProperties, boost::no_property, boost::listS>, boost::listS, boost::vecS, boost::undirectedS, boost::property<boost::vertex_bundle_t, ve::VertexProperties, boost::no_property>, boost::property<boost::edge_bundle_t, ed::EdgeProperties, boost::no_property>, boost::no_property, boost::listS>::config]’

/usr/include/boost/graph/detail/adjacency_list.hpp:1705: instantiated from ‘boost::adj_list_impl<Derived, Config, Base>::adj_list_impl(const boost::adj_list_impl<Derived, Config, Base>&) [with Derived = boost::adjacency_list<boost::vecS, boost::listS, boost::undirectedS, ve::VertexProperties, ed::EdgeProperties, boost::no_property, boost::listS>, Config = boost::detail::adj_list_gen<boost::adjacency_list< boost::vecS, boost::listS, boost::undirectedS, ve::VertexProperties, ed::EdgeProperties, boost::no_property, boost::listS>, boost::listS, boost::vecS, boost::undirectedS, boost::property<boost::vertex_bundle_t, ve::VertexProperties, boost::no_property>, boost::property<boost::edge_bundle_t, ed::EdgeProperties, boost::no_property>, boost::no_property, boost::listS>::config, Base = boost::undirected_graph_helper<boost::detail::adj_ list_gen<boost::adjacency_list<boost::vecS, boost::listS, boost::undirectedS, ve::VertexProperties, ed::EdgeProperties, boost::no_property, boost::listS>, boost::listS, boost::vecS, boost::undirectedS, boost::property<boost::vertex_bundle_t, ve::VertexProperties, boost::no_property>, boost::property<boost::edge_bundle_t, ed::EdgeProperties, boost::no_property>, boost::no_property, boost::listS>::config>]’

/usr/include/boost/graph/adjacency_list.hpp:368: instantiated from ‘boost::adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty, EdgeProperty, GraphProperty, EdgeListS>::adjacency_list(const boost::adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty, EdgeProperty, GraphProperty, EdgeListS>&) [with OutEdgeListS = boost::vecS, VertexListS = boost::listS, DirectedS = boost::undirectedS, VertexProperty = ve::VertexProperties, EdgeProperty = ed::EdgeProperties, GraphProperty = boost::no_property, EdgeListS = boost::listS]’

create_object.cpp:43: instantiated from here
Please help me out of this pblm .I will be thankful to you.
Apr 3 '08 #1
Share this Question
Share on Google+
2 Replies


weaknessforcats
Expert Mod 5K+
P: 9,197
Re-posting your problem isn't going to get you more help.

I really have no idea why you are getting these messages. Especially, since there is no error code.

You may need to contact the Boost folks and ask them the question.
Apr 3 '08 #2

100+
P: 151
Re-posting your problem isn't going to get you more help.

I really have no idea why you are getting these messages. Especially, since there is no error code.

You may need to contact the Boost folks and ask them the question.
Thankyou sir,
i wll contact Boost folks and ask them.
Apr 4 '08 #3

Post your reply

Sign in to post your reply or Sign up for a free account.