[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