src/work/jacint/dijkstra.cc
changeset 170 9091b1ebca27
parent 167 7949a29a334e
child 173 de9849252e78
equal deleted inserted replaced
2:312334c99e1d 3:6e808b2b6679
     4 #include <list_graph.hh>
     4 #include <list_graph.hh>
     5 #include <dimacs.hh>
     5 #include <dimacs.hh>
     6 #include <dijkstra.h>
     6 #include <dijkstra.h>
     7 #include <time_measure.h>
     7 #include <time_measure.h>
     8 
     8 
       
     9 #include <bin_heap.hh>
       
    10 #include <fib_heap.h>
       
    11 
     9 using namespace hugo;
    12 using namespace hugo;
    10 
    13 
    11 int main(int, char **) {
    14 int main(int, char **) {
    12   typedef ListGraph::NodeIt NodeIt;
    15   typedef ListGraph::NodeIt NodeIt;
    13   typedef ListGraph::EachEdgeIt EachEdgeIt;
    16   typedef ListGraph::EachNodeIt EachNodeIt;
       
    17   typedef ListGraph::InEdgeIt InEdgeIt; 
    14 
    18 
    15   ListGraph G;
    19   ListGraph G;
    16   NodeIt s, t;
    20   NodeIt s, t;
    17   ListGraph::EdgeMap<int> cap(G);
    21   ListGraph::EdgeMap<int> cap(G);
    18   readDimacsMaxFlow(std::cin, G, s, t, cap);
    22   readDimacsMaxFlow(std::cin, G, s, t, cap);
    19 
    23 
    20   std::cout << "dijkstra demo ..." << std::endl;
    24   std::cout << "dijkstra demo ..." << std::endl;
    21   
    25   
    22   double pre_time=currTime();
    26   double pre_time=currTime();
    23     Dijkstra<ListGraph, int> dijkstra_test(G, s, cap);
    27     Dijkstra<ListGraph, int, FibHeap<ListGraph::NodeIt, int, 
       
    28     ListGraph::NodeMap<int> > > dijkstra_test(G, s, cap);
    24     dijkstra_test.run();
    29     dijkstra_test.run();
    25   double post_time=currTime();
    30   double post_time=currTime();
    26     
    31     
    27   std::cout << "running time: " << post_time-pre_time << " sec"<< std::endl; 
    32   std::cout << "running time with fib_heap: " 
       
    33 	    << post_time-pre_time << " sec"<< std::endl; 
    28  
    34  
    29   int hiba=0;
    35   pre_time=currTime();
    30   EachEdgeIt e;
    36   Dijkstra<ListGraph, int, BinHeap<ListGraph::NodeIt, int, 
    31   for ( G.getFirst(e) ; G.valid(e); G.next(e) ) {
    37     ListGraph::NodeMap<int> > > dijkstra_test2(G, s, cap);
    32     NodeIt u=G.tail(e);
    38   dijkstra_test2.run();
    33     NodeIt v=G.head(e);
    39   post_time=currTime();
    34     if ( dijkstra_test.dist(v) - dijkstra_test.dist(u) > cap.get(e) ) {
    40   
    35       std::cout<<"Hiba: "<<dijkstra_test.dist(v) - dijkstra_test.dist(u) - cap.get(e)<<std::endl;
    41   std::cout << "running time with bin_heap: " 
    36       ++hiba;
    42 	    << post_time-pre_time << " sec"<< std::endl; 
       
    43   
       
    44 
       
    45   int hiba_fib=0;
       
    46   int hiba_bin=0;
       
    47   EachNodeIt u;
       
    48   for ( G.getFirst(u) ; G.valid(u); G.next(u) ) {
       
    49     InEdgeIt e;
       
    50     for ( G.getFirst(e,u); G.valid(e); G.next(e) ) {
       
    51       NodeIt v=G.tail(e);
       
    52       if ( dijkstra_test.dist(u) - dijkstra_test.dist(v) > cap.get(e) )
       
    53 	{
       
    54 	  std::cout<<"Hibas el a fibonaccis Dijkstraban: " 
       
    55 		   << dijkstra_test.dist(u) - dijkstra_test.dist(v) - 
       
    56 	    cap.get(e)<<std::endl;
       
    57 	  ++hiba_fib;
       
    58 	}
       
    59       if ( dijkstra_test2.dist(u) - dijkstra_test2.dist(v) > cap.get(e) )
       
    60 	{
       
    61 	  std::cout<<"Hibas el a binarisos Dijkstraban: " 
       
    62 		   << dijkstra_test2.dist(u) - dijkstra_test2.dist(v) - 
       
    63 	    cap.get(e)<<std::endl;
       
    64 	  ++hiba_bin;
       
    65 	}
       
    66       if ( e==dijkstra_test.pred(u) && 
       
    67 	   dijkstra_test.dist(u) - dijkstra_test.dist(v) != cap.get(e) )
       
    68 	{
       
    69 	  std::cout<<"Hibas fael a fibonaccis Dijkstraban!"<<std::endl;
       
    70 	  ++hiba_fib;
       
    71 	}
       
    72       if ( e==dijkstra_test2.pred(u) && 
       
    73 	   dijkstra_test2.dist(u) - dijkstra_test2.dist(v) != cap.get(e) )
       
    74 	{
       
    75 	  std::cout<<"Hibas fael a binarisos Dijkstraban!"<<std::endl;
       
    76 	  ++hiba_bin;
       
    77 	}
    37     }
    78     }
    38   }
    79   }
    39 
    80 
    40   std::cout << "Hibas elek szama: " << hiba << " a " << G.edgeNum() <<"-bol."<< std::endl;
    81   std::cout << "Hibas elek szama a fibonaccis Dijkstraban: " 
       
    82 	    << hiba_fib << " a " << G.edgeNum() <<"-bol."<< std::endl;
       
    83 
       
    84   std::cout << "Hibas elek szama a binarisos Dijkstraban: " 
       
    85 	    << hiba_bin << " a " << G.edgeNum() <<"-bol."<< std::endl;
    41 
    86 
    42   return 0;
    87   return 0;
    43 }
    88 }