File indexing completed on 2025-08-03 08:19:41
0001 #include <iostream>
0002
0003 #include <GTL/graph.h>
0004 #include <GTL/bellman_ford.h>
0005 #include <GTL/edge_map.h>
0006 #include <GTL/node_map.h>
0007 #include <GTL/dfs.h>
0008 #include <memory>
0009 #include <list>
0010
0011 class my_graph : public graph {
0012
0013 public:
0014
0015 my_graph() : graph () {}
0016
0017 node new_vertex(int x) {node n=graph::new_node();X[n]=x; return n;}
0018 void new_parton(node s, node t, int p) {edge e=graph::new_edge(s,t) ;P[e]=p;}
0019
0020 void save_node_info_handler (ostream *o, node n) const { *o<<"Value = "<<X[n]<<endl;}
0021 void save_edge_info_handler (ostream *o, edge n) const { *o<<"Value = "<<P[n]<<endl;}
0022
0023 int GetNodeValue(node n) const {return X[n];}
0024 int GetEdgeValue(edge n) const {return P[n];}
0025
0026 private:
0027
0028 node_map<int> X;
0029 edge_map<int> P;
0030
0031 };
0032
0033
0034 class parton {
0035
0036 public:
0037
0038 parton() {};
0039 parton (double mpt, double meta, double mphi, double me, bool mfinal) {pt=mpt;eta=meta;phi=mphi;e=me;final=mfinal;}
0040 ~parton() {cout<<" Parton Destructor ..."<<endl;}
0041
0042 bool isFinal() {return final;}
0043
0044 double pt, eta, phi, e;
0045 bool final;
0046 };
0047
0048 class shower : public graph {
0049
0050 public:
0051
0052 shower() : graph() {cout<<"Shower Constrcutor ..."<<endl;}
0053 ~shower() {cout<<"Shower Detrcutor ..."<<endl;}
0054
0055 node new_vertex(int x) {node n=graph::new_node();XX[n]=x; return n;}
0056 void new_parton(node s, node t, parton p) {edge e=graph::new_edge(s,t) ;PP[e]=p;}
0057 int GetNodeValue(node n) const {return XX[n];}
0058 void save_edge_info_handler (ostream *o, edge n) const { *o<<"Value = "<<PP[n].pt<<endl;}
0059 double GetEdgeValue(edge n) const {return PP[n].pt;}
0060
0061 private:
0062
0063 node_map<int> XX;
0064 edge_map<parton> PP;
0065
0066 };
0067
0068 class shower2 : public graph {
0069
0070 public:
0071
0072 shower2() : graph() {cout<<"Shower2 Constrcutor ..."<<endl;}
0073 virtual ~shower2() {cout<<"Shower2 Detrcutor ..."<<endl;}
0074
0075 node new_vertex(int x) {node n=graph::new_node();XX[n]=x; return n;}
0076
0077 void new_parton(node s, node t, unique_ptr<parton> p) {edge e=graph::new_edge(s,t);PP[e]=std::move(p);}
0078
0079
0080 void save_edge_info_handler (ostream *o, edge n) const { *o<<"Value = "<<PP[n]->pt<<endl;}
0081 double GetEdgeValue(edge n) const {return PP[n]->pt;}
0082 int GetNodeValue(node n) const {return XX[n];}
0083 bool GetFinal(edge e) const {return PP[e]->final;}
0084
0085 void post_new_edge_handler(edge e) {};
0086 void pre_clear_handler() {
0087 edge_iterator git3, gend3;
0088 for (git3 = edges_begin(), gend3 = edges_end(); git3 != gend3; ++git3)
0089 {
0090
0091 PP[*git3]=nullptr;
0092 }
0093 }
0094
0095 private:
0096
0097 node_map<int> XX;
0098 edge_map<shared_ptr<parton>> PP;
0099
0100 };
0101
0102 int main (int argc, char* argv[])
0103 {
0104 graph G;
0105 G.make_directed();
0106 node n1 = G.new_node();
0107 node n2 = G.new_node();
0108
0109 edge e1 = G.new_edge(n1,n2);
0110
0111
0112 node_map<int> n(G,1);
0113 edge_map<int> e(G,10);
0114
0115
0116
0117
0118
0119 my_graph S;
0120
0121 node n11=S.new_vertex(0);
0122 node n22=S.new_vertex(1);
0123 node n33=S.new_vertex(2);
0124 node n44=S.new_vertex(3);
0125 node n55=S.new_vertex(5);
0126
0127
0128 S.new_parton(n11,n22,10);
0129 S.new_parton(n11,n33,11);
0130 S.new_parton(n33,n44,20);
0131 S.new_parton(n33,n55,21);
0132
0133
0134
0135
0136 graph::node_iterator it, end;
0137
0138 for (it = S.nodes_begin(), end = S.nodes_end(); it != end; ++it)
0139 {
0140 cout<<*it<<" "<<S.GetNodeValue((node) *it)<<endl;
0141 }
0142
0143 graph::edge_iterator it2, end2;
0144
0145 for (it2 = S.edges_begin(), end2 = S.edges_end(); it2 != end2; ++it2)
0146 {
0147 cout<<*it2<<" "<<S.GetEdgeValue((edge) *it2)<<endl;
0148 }
0149
0150 cout<<endl;
0151
0152 shower gS;
0153
0154 cout<<endl;
0155
0156 node nn11=gS.new_vertex(0);
0157 node nn22=gS.new_vertex(1);
0158 node nn33=gS.new_vertex(1);
0159 node nn44=gS.new_vertex(2);
0160 node nn55=gS.new_vertex(2);
0161
0162
0163
0164 gS.new_parton(nn11,nn22,parton(100,0,0,100,false));
0165 gS.new_parton(nn11,nn33,parton(200,0,0,200,false));
0166 gS.new_parton(nn33,nn44,parton(50,0,0,50,true));
0167 gS.new_parton(nn33,nn55,parton(150,0,0,150,true));
0168
0169 shower::node_iterator git, gend;
0170
0171 for (git = gS.nodes_begin(), gend = gS.nodes_end(); git != gend; ++git)
0172 {
0173 cout<<*git<<" "<<gS.GetNodeValue(*git)<<endl;
0174 }
0175
0176 shower::edge_iterator git2, gend2;
0177
0178 for (git2 = gS.edges_begin(), gend2 = gS.edges_end(); git2 != gend2; ++git2)
0179 {
0180 cout<<*git2<<" "<<gS.GetEdgeValue(*git2)<<endl;
0181 }
0182
0183
0184 cout<<endl;
0185 auto mS=make_shared<shower2>();
0186 mS->make_directed();
0187
0188 node nnn11=mS->new_vertex(0);
0189 node nnn22=mS->new_vertex(1);
0190 node nnn33=mS->new_vertex(1);
0191 node nnn44=mS->new_vertex(2);
0192 node nnn55=mS->new_vertex(2);
0193 node nnn66=mS->new_vertex(3);
0194 node nnn77=mS->new_vertex(3);
0195 node nnn88=mS->new_vertex(4);
0196
0197 mS->new_parton(nnn11,nnn22,unique_ptr<parton>(new parton(100,0,0,100,false)));
0198 mS->new_parton(nnn11,nnn33,unique_ptr<parton>(new parton(200,0,0,200,false)));
0199 mS->new_parton(nnn33,nnn44,unique_ptr<parton>(new parton(50,0,0,50,true)));
0200 mS->new_parton(nnn33,nnn55,unique_ptr<parton>(new parton(150,0,0,150,false)));
0201 mS->new_parton(nnn55,nnn66,unique_ptr<parton>(new parton(80,0,0,80,true)));
0202 mS->new_parton(nnn55,nnn77,unique_ptr<parton>(new parton(70,0,0,70,false)));
0203 mS->new_parton(nnn77,nnn88,unique_ptr<parton>(new parton(60,0,0,60,true)));
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214
0215
0216
0217
0218
0219
0220
0221 shower2::node_iterator git0, gend0;
0222
0223 for (git0 = mS->nodes_begin(), gend0 = mS->nodes_end(); git0 != gend0; ++git0)
0224 {
0225 cout<<*git0<<" "<<mS->GetNodeValue(*git0)<<" "<<git0->indeg()<<" "<<git0->outdeg()<<endl;
0226 }
0227
0228 shower2::edge_iterator git3, gend3;
0229
0230 for (git3 = mS->edges_begin(), gend3 = mS->edges_end(); git3 != gend3; ++git3)
0231 {
0232 cout<<*git3<<" "<<mS->GetEdgeValue(*git3)<<endl;
0233 }
0234
0235 list<node> ln=mS->all_nodes();
0236 cout<<ln.size()<<endl;
0237
0238 list<edge> le=mS->all_edges();
0239 cout<<le.size()<<endl;
0240
0241
0242 dfs search;
0243 search.start_node(nnn11);
0244 search.run(*mS);
0245 cout<< search.number_of_reached_nodes () <<endl;
0246
0247 dfs::dfs_iterator itt2, endt2;
0248 for (itt2 = search.begin(), endt2=search.end(); itt2 !=endt2; ++itt2)
0249 {
0250 cout<<*itt2<<endl;
0251 }
0252
0253 dfs::tree_edges_iterator itt, endt;
0254 for (itt = search.tree_edges_begin(), endt=search.tree_edges_end(); itt !=endt; ++itt)
0255 {
0256 cout<<*itt<<endl;
0257 }
0258
0259 mS->clear();
0260 cout<<" mS->clear()"<<endl;
0261
0262
0263 mS=0;
0264 cout<<"Done .."<<endl;
0265 }