469,604 Members | 2,358 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,604 developers. It's quick & easy.

Problem in creating Graph Object using Boost Graph Library

151 100+
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
2 1935
weaknessforcats
9,208 Expert Mod 8TB
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
Man4ish
151 100+
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.

Similar topics

7 posts views Thread by Dax | last post: by
2 posts views Thread by Christian Christmann | last post: by
8 posts views Thread by Jef Driesen | last post: by
6 posts views Thread by cppnow | last post: by
reply views Thread by guiromero | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.