benchmark/hcube.cc
author hegyi
Thu, 05 Jan 2006 12:30:09 +0000
changeset 1878 409a31271efd
parent 1756 b1f441f24d08
child 1956 a055123339d5
permissions -rw-r--r--
Several changes. \n If new map is added to mapstorage it emits signal with the name of the new map. This was important, because from now on not only tha mapwin should be updated. \n Furthermore algobox gets a pointer to mapstorage instead of only the mapnames from it. This is important because without it it would be complicated to pass all of the required maps to algobox.
alpar@708
     1
// -*- mode:C++ -*-
alpar@708
     2
alpar@1632
     3
#include<cmath>
alpar@921
     4
#include<lemon/list_graph.h>
alpar@921
     5
#include<lemon/smart_graph.h>
alpar@921
     6
#include<lemon/dijkstra.h>
alpar@921
     7
#include<lemon/preflow.h>
alpar@729
     8
alpar@711
     9
#include"bench_tools.h"
alpar@708
    10
alpar@708
    11
using namespace std;
alpar@921
    12
using namespace lemon;
alpar@708
    13
alpar@718
    14
inline int numOfOnes(int n,int dim)
alpar@718
    15
{
alpar@718
    16
  int s=0;
alpar@718
    17
  for(int i=0;i<dim;i++) {
alpar@718
    18
    s+=n%2;
alpar@718
    19
    n>>=1;
alpar@718
    20
  }
alpar@718
    21
  return s;
alpar@718
    22
}
alpar@718
    23
alpar@718
    24
inline int numOfZeros(int n,int dim)
alpar@718
    25
{
alpar@718
    26
  int s=dim;
alpar@718
    27
  for(int i=0;i<dim;i++) {
alpar@718
    28
    s-=n&1;
alpar@718
    29
    n>>=1;
alpar@718
    30
  }
alpar@718
    31
  return s;
alpar@718
    32
}
alpar@718
    33
alpar@708
    34
int main(int argc, char *argv[])
alpar@708
    35
{
alpar@708
    36
  //  typedef ListGraph Graph;
alpar@708
    37
  typedef SmartGraph Graph;
alpar@708
    38
alpar@1756
    39
  GRAPH_TYPEDEFS(Graph);
alpar@708
    40
alpar@708
    41
  Graph G;
alpar@708
    42
  
alpar@708
    43
  Timer T;
alpar@708
    44
  
alpar@708
    45
  if(argc!=2) {
alpar@708
    46
    cout << "Usage: " << argv[0] << " dim\n";
alpar@708
    47
    return 1;
alpar@708
    48
  }
alpar@708
    49
  
alpar@708
    50
  int dim=atoi(argv[1]);
alpar@708
    51
  
alpar@718
    52
//   cout << "Creating Hipercube ("<< (1<<dim) << " nodes, "
alpar@718
    53
//        << dim*(1<<dim) << " edges):";
alpar@708
    54
alpar@1847
    55
  T.restart();
alpar@708
    56
  vector<Node> nodes;
alpar@1689
    57
  addBiDirHyperCube(G,dim,nodes);
alpar@718
    58
alpar@718
    59
  PrintTime("GENGRAPH",T);
alpar@718
    60
alpar@1847
    61
  T.restart();
alpar@708
    62
  Graph::EdgeMap<int> map(G);
alpar@729
    63
  for(int i=0;i<5;i++) {
alpar@708
    64
    Primes P;
alpar@708
    65
    for(int i=0;i<dim*(1<<dim);i++) P();
alpar@708
    66
    
alpar@708
    67
    //  for(EdgeIt e(G);G.valid(e);G.next(e)) map[e]=P();
klao@946
    68
klao@946
    69
    ///\todo It must have been commented out because of
klao@946
    70
    ///setToId
klao@946
    71
//     Edge te;
klao@946
    72
//     for(int i=0;i<dim*(1<<dim);i++) {
klao@946
    73
//       te.setToId(((long long int)(i)*93505)%(dim*(1<<dim)));
klao@946
    74
//       //    map[Edge(((long long int)(i)*2987)%(dim*(1<<dim)))]=P();
klao@946
    75
//       map[te]=P();
klao@946
    76
//     }
alpar@905
    77
    
alpar@718
    78
//     for(int i=0;i<(1<<dim);i++) {
alpar@718
    79
//       int mul= (1<<(numOfZeros(i,dim)/4));
alpar@718
    80
//       for(OutEdgeIt e(G,nodes[i]);G.valid(e);G.next(e))
alpar@718
    81
// 	map[e]*=mul;
alpar@718
    82
//     }
alpar@708
    83
  }
alpar@708
    84
  
alpar@718
    85
  PrintTime("GENLENGTHS",T);
alpar@718
    86
alpar@1847
    87
  T.restart();
alpar@708
    88
  {
alpar@708
    89
    Dijkstra<Graph> Dij(G,map);
alpar@729
    90
    for(int i=0;i<10;i++)
alpar@729
    91
      Dij.run(nodes[0]);
alpar@708
    92
  }
alpar@718
    93
  PrintTime("DIJKSTRA",T);
alpar@718
    94
alpar@1847
    95
  T.restart();
alpar@718
    96
  {
alpar@718
    97
   Graph::EdgeMap<int> flow(G);
alpar@708
    98
   
alpar@840
    99
    Preflow<Graph,int> MF(G,nodes[0],nodes[1<<dim-1],map,flow);
alpar@729
   100
    for(int i=0;i<10;i++)
alpar@729
   101
      MF.run(MF.NO_FLOW);
alpar@718
   102
  }
alpar@718
   103
  PrintTime("PREFLOW",T);
alpar@718
   104
alpar@708
   105
}