1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Problem in using the Graph object in different function

Discussion in 'C' started by man4ish, Apr 5, 2008.

  1. man4ish

    man4ish New Member

    Joined:
    Apr 5, 2008
    Messages:
    5
    Likes Received:
    0
    Trophy Points:
    0
    I am creating a graph using boost library, I am making the network using create_Network function()
    i am adding the vertices to this graph by creating the object g of class Graph.
    I am trying to use this object g in the another function get_neighbours()
    but it is not giving any result.Should I make it global or should use constructor so that values stored in the graph(vertices) object(g), can be used in any function.
    Code:
    #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 Molecule
    {
    typedef adjacency_list<boost::vecS, boost::listS, boost::undirectedS, ve::VertexProperties, ed::EdgeProperties> Graph;
    map<int,string> m;
    
    public:
    void set_molecule_property(vector<string>& s4)
    {
    for (unsigned int i = 1; i <= s4.size(); i++)
    {
    m[i]=s4[i-1];
    }
    }
    
    
    
    void create_chemical_Network(vector<int> s1,vector<int> s2,vector<int> s3)
    {
    const int V = m.size()+1;
    Graph g(V);
    for (int i = 0; i <V ; 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);
    }
    }
    }
    
    void get_neighbours()
    {
    //Graph g(m.size()+1);
    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)
    {
    if(id[*i]!=0)
    {
    cout << id[*i]<<"("<<m[id[*i]]<<")" << " ";
    for (boost::tie(ei,edge_end) = out_edges(*i, g); ei != edge_end; ++ei)
    cout << " --" << name[*ei] << "--> " << m[id[target(*ei, g)]] << " ";
    cout << endl;
    }
    }
    print_edges(g, id);
    cout<<endl;
    print_vertices(g,id);
    }
    };
    
    int main(int,char* [])
    {
    using namespace boost;
    Molecule mol;
    int s11[]={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 s12[]={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 s13[]={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};
    string s14[]={"O","O","O","N","N","N","N","C","C","C","C","C","C","C","C","C","C","C","C","C","C","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H","H"};
    vector <string> s4;
    vector <int> s1,s2,s3;
    
    for (unsigned int i = 0; i < sizeof(s11)/sizeof(string); i++)
    {
    s1.push_back(s11[i]);
    s2.push_back(s12[i]);
    s3.push_back(s13[i]);
    }
    
    
    for (unsigned int i = 0; i < sizeof(s14)/sizeof(string); i++)
    {
    s4.push_back(s14[i]);
    }
    mol.set_molecule_property(s4);
    mol.create_chemical_Network(s1,s2,s3);
    mol.get_neighbours();
    return 0;
    }
    Please Help me out of this pblm.I will be really thankful to you.
     
    Last edited by a moderator: Apr 7, 2008

Share This Page