[Lemon-commits] [lemon_svn] alpar: r347 - hugo/trunk/src/work/alpar/dijkstra

Lemon SVN svn at lemon.cs.elte.hu
Mon Nov 6 20:38:56 CET 2006


Author: alpar
Date: Fri Mar 26 15:03:02 2004
New Revision: 347

Modified:
   hugo/trunk/src/work/alpar/dijkstra/dijkstra.cc
   hugo/trunk/src/work/alpar/dijkstra/dijkstra.h

Log:
Heap is now a template-template parameter


Modified: hugo/trunk/src/work/alpar/dijkstra/dijkstra.cc
==============================================================================
--- hugo/trunk/src/work/alpar/dijkstra/dijkstra.cc	(original)
+++ hugo/trunk/src/work/alpar/dijkstra/dijkstra.cc	Fri Mar 26 15:03:02 2004
@@ -29,10 +29,13 @@
   
   //double pre_time=currTime();
   tim.reset();
-  Dijkstra <SmartGraph,
-    SmartGraph::EdgeMap<int>,
-    FibHeap<SmartGraph::Node, int, SmartGraph::NodeMap<int> >
-    > dijkstra_test(G, cap); 
+//   Dijkstra <SmartGraph,
+//     SmartGraph::EdgeMap<int>,
+//     FibHeap<SmartGraph::Node, int, SmartGraph::NodeMap<int> >
+//     > dijkstra_test(G, cap); 
+  
+  Dijkstra <SmartGraph, SmartGraph::EdgeMap<int>, FibHeap >
+    dijkstra_test(G, cap); 
   
   dijkstra_test.run(s);
   //double post_time=currTime();
@@ -44,10 +47,13 @@
  
   //pre_time=currTime();
   tim.reset();
-  Dijkstra < SmartGraph,
-    SmartGraph::EdgeMap<int>,
-    BinHeap<SmartGraph::Node, int, SmartGraph::NodeMap<int> > > 
-    dijkstra_test2(G, cap);
+//   Dijkstra < SmartGraph,
+//     SmartGraph::EdgeMap<int>,
+//     BinHeap<SmartGraph::Node, int, SmartGraph::NodeMap<int> > > 
+//     dijkstra_test2(G, cap);
+  
+  Dijkstra <SmartGraph, SmartGraph::EdgeMap<int>, BinHeap >
+    dijkstra_test2(G, cap); 
   
   dijkstra_test2.run(s);
   //post_time=currTime();

Modified: hugo/trunk/src/work/alpar/dijkstra/dijkstra.h
==============================================================================
--- hugo/trunk/src/work/alpar/dijkstra/dijkstra.h	(original)
+++ hugo/trunk/src/work/alpar/dijkstra/dijkstra.h	Fri Mar 26 15:03:02 2004
@@ -68,9 +68,10 @@
 #else
   template <typename Graph,
 	    typename LengthMap=typename Graph::EdgeMap<int>,
-	    typename Heap=BinHeap <typename Graph::Node,
-				   typename LengthMap::ValueType, 
-				   typename Graph::NodeMap<int> > >
+	    template <class,class,class> class Heap = BinHeap >
+// 	    typename Heap=BinHeap <typename Graph::Node,
+// 				   typename LengthMap::ValueType, 
+// 				   typename Graph::NodeMap<int> > >
 #endif
   class Dijkstra{
   public:
@@ -104,7 +105,6 @@
     Dijkstra(Graph& _G, LengthMap& _length) :
       G(_G), length(_length), predecessor(_G), pred_node(_G), distance(_G) { }
     
-
     void run(Node s);
     
     ///The distance of a node from the source.
@@ -173,7 +173,8 @@
   ///shortest path to each node. The algorithm computes
   ///- The shortest path tree.
   ///- The distance of each node from the source.
-  template <typename Graph, typename LengthMap, typename Heap >
+  template <typename Graph, typename LengthMap,
+	    template<class,class,class> class Heap >
   void Dijkstra<Graph,LengthMap,Heap>::run(Node s) {
     
     NodeIt u;
@@ -191,7 +192,8 @@
     //     //typename Graph::NodeMap<int> scanned(G,false);
     typename Graph::NodeMap<int> heap_map(G,-1);
     
-    Heap heap(heap_map);
+    //Heap heap(heap_map);
+    Heap<Node,ValueType,typename Graph::NodeMap<int> > heap(heap_map);
     
     heap.push(s,0); 
     //    reach.set(s, true);
@@ -207,20 +209,20 @@
 	  Node w=G.head(e); 
 	  
 	  switch(heap.state(w)) {
-	  case Heap::PRE_HEAP:
+	  case heap.PRE_HEAP:
 	    //	    reach.set(w,true);
 	    heap.push(w,oldvalue+length[e]); 
 	    predecessor.set(w,e);
 	    pred_node.set(w,v);
 	    break;
-	  case Heap::IN_HEAP:
+	  case heap.IN_HEAP:
 	    if ( oldvalue+length[e] < heap[w] ) {
 	      heap.decrease(w, oldvalue+length[e]); 
 	      predecessor.set(w,e);
 	      pred_node.set(w,v);
 	    }
 	    break;
-	  case Heap::POST_HEAP:
+	  case heap.POST_HEAP:
 	    break;
 	  }
 	}



More information about the Lemon-commits mailing list