codetoad.com
  ASP Shopping CartForum & BBS
  - all for $20 from CodeToad Plus!
  
  Home || ASP | ASP.Net | C++/C# | DHTML | HTML | Java | Javascript | Perl | VB | XML || CodeToad Plus! || Forums || RAM 
Search Site:
Search Forums:
  How to reduce code length  man4ish at 11:08 on Saturday, April 05, 2008
 

#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
{
map<int,string> m;

public:
void set_molecule_property(vector<string>& s4)
{
for (unsigned int i = 1; i <= s4.size(); i++)
{
m=s4[i-1];
}
}

typedef adjacency_list<boost::vecS, boost::listS, boost::undirectedS, ve::VertexProperties, ed::EdgeProperties> Graph;
int number_of_vertices()
{
return m.size();
}

void create_chemical_Network(vector<int> s1,vector<int> s2,vector<int> s3)
{
typedef adjacency_list<boost::vecS, boost::listS, boost::undirectedS, ve::VertexProperties, ed::EdgeProperties> Graph;
const int V = m.size()+1;
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 <50 ; i++)
{
if(s3==1){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("single bond"), g);
}
if(s3==2){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("double bond"), g);
}
if(s3==3){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("triple_bond"), g);
}
}

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;
}
}

}


void Get_interaction(vector<int> s1,vector<int> s2,vector<int> s3)
{
typedef adjacency_list<boost::vecS, boost::listS, boost::undirectedS, ve::VertexProperties, ed::EdgeProperties> Graph;
const int V = m.size()+1;
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 <50 ; i++)
{
if(s3==1){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("single bond"), g);
}
if(s3==2){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("double bond"), g);
}
if(s3==3){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("triple_bond"), g);
}
}

print_edges(g, id);

}



void print_verices(vector<int> s1,vector<int> s2,vector<int> s3)
{
typedef adjacency_list<boost::vecS, boost::listS, boost::undirectedS, ve::VertexProperties, ed::EdgeProperties> Graph;
const int V = m.size()+1;
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 <50 ; i++)
{
if(s3==1){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("single bond"), g);
}
if(s3==2){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("double bond"), g);
}
if(s3==3){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("triple_bond"), g);
}
}
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];

cout << endl;
}
}
}

void Get_Neighbours(vector<int> s1,vector<int> s2,vector<int> s3,int atom)
{
typedef adjacency_list<boost::vecS, boost::listS, boost::undirectedS, ve::VertexProperties, ed::EdgeProperties> Graph;
const int V = m.size()+1;
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 <50 ; i++)
{
if(s3==1){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("single bond"), g);
}
if(s3==2){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("double bond"), g);
}
if(s3==3){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("triple_bond"), g);
}
}


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]==atom)
{
for (boost::tie(ei,edge_end) = out_edges(*i, g); ei != edge_end; ++ei)
cout << id[target(*ei, g)]<< " ";
cout << endl;
}
}
}


void Get_bond(vector<int> s1,vector<int> s2,vector<int> s3,int a ,int b)
{
typedef adjacency_list<boost::vecS, boost::listS, boost::undirectedS, ve::VertexProperties, ed::EdgeProperties> Graph;
const int V = m.size()+1;
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 <50 ; i++)
{
if(s3==1){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("single bond"), g);
}
if(s3==2){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("double bond"), g);
}
if(s3==3){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("triple_bond"), g);
}
}

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]==a)
{
cout << id[*i]<<"("<<m[id[*i]]<<")" << " ";
for (boost::tie(ei,edge_end) = out_edges(*i, g); ei != edge_end; ++ei)
if(id[target(*ei, g)]==b)
cout << " bond " << name[*ei] ;
cout << endl;
}
}

}
bool Is_adjacent(vector<int> s1,vector<int> s2,vector<int> s3,int a,int b)
{
typedef adjacency_list<boost::vecS, boost::listS, boost::undirectedS, ve::VertexProperties, ed::EdgeProperties> Graph;
const int V = m.size()+1;
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 <50 ; i++)
{
if(s3==1){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("single bond"), g);
}
if(s3==2){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("double bond"), g);
}
if(s3==3){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("triple_bond"), g);
}
}

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)
{
for (boost::tie(ei,edge_end) = out_edges(*i, g); ei != edge_end; ++ei)
{
if(id[source(*ei, g)]==a)
{
if(id[target(*ei, g)]==b)
//cout<<id[source(*ei, g)]<<" "<<"--------"<<id[target(*ei, g)];
return true;
}


}






}
return false;

}
bool Is_Present(vector<int> s1,vector<int> s2,vector<int> s3,int b)
{
typedef adjacency_list<boost::vecS, boost::listS, boost::undirectedS, ve::VertexProperties, ed::EdgeProperties> Graph;
const int V = m.size()+1;
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 <50 ; i++)
{
if(s3==1){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("single bond"), g);
}
if(s3==2){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("double bond"), g);
}
if(s3==3){
add_edge(vertex(s1, g), vertex(s2, g), ed::EdgeProperties("triple_bond"), g);
}
}
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]==b)
{
return 1;
}
}

return 0;

}




};


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,10,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);
s2.push_back(s12);
s3.push_back(s13);
}
for (unsigned int i = 0; i < sizeof(s14)/sizeof(string); i++)
{
s4.push_back(s14);
}
mol.set_molecule_property(s4);
mol.create_chemical_Network(s1,s2,s3);
mol.print_verices(s1,s2,s3);
mol.Get_interaction(s1,s2,s3);
mol.Get_Neighbours(s1,s2,s3, 6);
mol.Get_bond(s1,s2,s3,1,19);
cout<<mol.Is_adjacent(s1,s2,s3,0,23)<<endl;
cout<<mol.Is_Present(s1,s2,s3,67)<<endl;
cout<<"number_of_vertices="<<mol.number_of_vertices()<<endl;
return 0;
}


This Program is working fine , but problem is this it is too lengthy , how can i reduce its length.I am unnecessary creating graph in every function before using it ,how can i reduce my code, it will be good if you can give me one example for this .I have tried making function and passing graph Object in the function but it is giving error , is there any other way of creating the Graph object g , which can be used in many functions.









CodeToad Experts

Can't find the answer?
Our Site experts are answering questions for free in the CodeToad forums
//








Recent Forum Threads
• mkdirs
• Re: Web Development Project
• ** Site Hacked ** javascript inserted...
• Losing background/text color when converting HTML to PDF
• hidden div block when displayed, displays at an offset of 200px only in IE 6..
• help - sketch
• Re: Perl Script - File Handling.
• Open a file from website
• Re: to open 5 terminals from one and also execute different commands on each terminal


Recent Articles
ASP GetTempName
Decode and Encode UTF-8
ASP GetFile
ASP FolderExists
ASP FileExists
ASP OpenTextFile
ASP FilesystemObject
ASP CreateFolder
ASP CreateTextFile
Javascript Get Selected Text


© Copyright codetoad.com 2001-2008