[Lemon-commits] [lemon_svn] alpar: r312 - hugo/trunk/src/work/jacint
Lemon SVN
svn at lemon.cs.elte.hu
Mon Nov 6 20:38:40 CET 2006
Author: alpar
Date: Sat Mar 20 17:13:19 2004
New Revision: 312
Modified:
hugo/trunk/src/work/jacint/bin_heap.hh
hugo/trunk/src/work/jacint/dijkstra.cc
hugo/trunk/src/work/jacint/dijkstra.h
hugo/trunk/src/work/jacint/fib_heap.h
Log:
Several bugfixes
Modified: hugo/trunk/src/work/jacint/bin_heap.hh
==============================================================================
--- hugo/trunk/src/work/jacint/bin_heap.hh (original)
+++ hugo/trunk/src/work/jacint/bin_heap.hh Sat Mar 20 17:13:19 2004
@@ -153,15 +153,16 @@
}
void erase(const Key &k) {
- rmidx(kim.get(k));
+ rmidx(kim[k]);
}
- const Val get(const Key &k) const {
- int idx = kim.get(k);
+ Val operator[](const Key &k) const {
+ int idx = kim[k];
return data[idx].second;
}
+
void put(const Key &k, const Val &v) {
- int idx = kim.get(k);
+ int idx = kim[k];
if( idx < 0 ) {
push(k,v);
}
@@ -174,16 +175,16 @@
}
void decrease(const Key &k, const Val &v) {
- int idx = kim.get(k);
+ int idx = kim[k];
bubble_up(idx, PairType(k,v));
}
void increase(const Key &k, const Val &v) {
- int idx = kim.get(k);
+ int idx = kim[k];
bubble_down(idx, PairType(k,v), data.size());
}
state_enum state(const Key &k) const {
- int s = kim.get(k);
+ int s = kim[k];
if( s>=0 )
s=0;
return state_enum(s);
Modified: hugo/trunk/src/work/jacint/dijkstra.cc
==============================================================================
--- hugo/trunk/src/work/jacint/dijkstra.cc (original)
+++ hugo/trunk/src/work/jacint/dijkstra.cc Sat Mar 20 17:13:19 2004
@@ -25,12 +25,12 @@
std::cout << "dijkstra demo ..." << std::endl;
double pre_time=currTime();
- Dijkstra<SmartGraph, int, FibHeap<SmartGraph::Node, int,
+ Dijkstra<SmartGraph, int, FibHeap<SmartGraph::Node, int,
SmartGraph::NodeMap<int> > > dijkstra_test(G, cap);
- dijkstra_test.run(s);
+ dijkstra_test.run(s);
double post_time=currTime();
- std::cout << "running time with fib_heap: "
+ std::cout << "running time with fib_heap: "
<< post_time-pre_time << " sec"<< std::endl;
pre_time=currTime();
@@ -50,32 +50,32 @@
InEdgeIt e;
for ( G.first(e,u); G.valid(e); G.next(e) ) {
Node v=G.tail(e);
- if ( dijkstra_test.dist(u) - dijkstra_test.dist(v) > cap.get(e) )
+ if ( dijkstra_test.dist(u) - dijkstra_test.dist(v) > cap[e] )
{
std::cout<<"Hibas el a fibonaccis Dijkstraban: "
<< dijkstra_test.dist(u) - dijkstra_test.dist(v) -
- cap.get(e)<<std::endl;
+ cap[e]<<std::endl;
++hiba_fib;
}
- if ( dijkstra_test2.dist(u) - dijkstra_test2.dist(v) > cap.get(e) )
+ if ( dijkstra_test2.dist(u) - dijkstra_test2.dist(v) > cap[e] )
{
std::cout<<"Hibas el a binarisos Dijkstraban: "
<< dijkstra_test2.dist(u) - dijkstra_test2.dist(v) -
- cap.get(e)<<std::endl;
+ cap[e]<<std::endl;
++hiba_bin;
}
if ( e==dijkstra_test.pred(u) &&
- dijkstra_test.dist(u) - dijkstra_test.dist(v) != cap.get(e) )
+ dijkstra_test.dist(u) - dijkstra_test.dist(v) != cap[e] )
{
std::cout<<"Hibas fael a fibonaccis Dijkstraban: "<<
- dijkstra_test.dist(u) - dijkstra_test.dist(v)- cap.get(e)<<std::endl;
+ dijkstra_test.dist(u) - dijkstra_test.dist(v)- cap[e]<<std::endl;
++hiba_fib;
}
if ( e==dijkstra_test2.pred(u) &&
- dijkstra_test2.dist(u) - dijkstra_test2.dist(v) != cap.get(e) )
+ dijkstra_test2.dist(u) - dijkstra_test2.dist(v) != cap[e] )
{
std::cout<<"Hibas fael a binarisos Dijkstraban: "<<
- dijkstra_test2.dist(u) - dijkstra_test2.dist(v)- cap.get(e)<<std::endl;
+ dijkstra_test2.dist(u) - dijkstra_test2.dist(v)- cap[e]<<std::endl;
++hiba_bin;
}
}
Modified: hugo/trunk/src/work/jacint/dijkstra.h
==============================================================================
--- hugo/trunk/src/work/jacint/dijkstra.h (original)
+++ hugo/trunk/src/work/jacint/dijkstra.h Sat Mar 20 17:13:19 2004
@@ -45,7 +45,9 @@
const LengthMap& length;
typename Graph::NodeMap<Edge> predecessor;
typename Graph::NodeMap<T> distance;
+ //FIXME:
typename Graph::NodeMap<bool> reach;
+ //typename Graph::NodeMap<int> reach;
public :
@@ -65,7 +67,9 @@
reach.set(u,false);
}
+ //FIXME:
typename Graph::NodeMap<bool> scanned(G,false);
+ //typename Graph::NodeMap<int> scanned(G,false);
typename Graph::NodeMap<int> heap_map(G,-1);
Heap heap(heap_map);
@@ -76,7 +80,7 @@
while ( !heap.empty() ) {
Node v=heap.top();
- T oldvalue=heap.get(v);
+ T oldvalue=heap[v];
heap.pop();
distance.set(v, oldvalue);
scanned.set(v,true);
@@ -90,26 +94,23 @@
reach.set(w,true);
heap.push(w,oldvalue+length[e]);
predecessor.set(w,e);
- } else if ( oldvalue+length[e] < heap.get(w) ) {
+ } else if ( oldvalue+length[e] < heap[w] ) {
predecessor.set(w,e);
heap.decrease(w, oldvalue+length[e]);
}
}
}
}
- }
+ }
-
T dist(Node v) {
return distance[v];
}
-
Edge pred(Node v) {
return predecessor[v];
}
-
bool reached(Node v) {
return reach[v];
}
Modified: hugo/trunk/src/work/jacint/fib_heap.h
==============================================================================
--- hugo/trunk/src/work/jacint/fib_heap.h (original)
+++ hugo/trunk/src/work/jacint/fib_heap.h Sat Mar 20 17:13:19 2004
@@ -94,7 +94,7 @@
void set (Item const it, PrioType const value) {
- int i=iimap.get(it);
+ int i=iimap[it];
if ( i >= 0 && container[i].in ) {
if ( comp(value, container[i].prio) ) decrease(it, value);
if ( comp(container[i].prio, value) ) increase(it, value);
@@ -103,7 +103,7 @@
void push (Item const it, PrioType const value) {
- int i=iimap.get(it);
+ int i=iimap[it];
if ( i < 0 ) {
int s=container.size();
iimap.set( it, s );
@@ -145,19 +145,17 @@
- PrioType& operator[](const Item& it) const {
- return container[iimap.get(it)].prio;
+ PrioType& operator[](const Item& it) {
+ return container[iimap[it]].prio;
}
const PrioType& operator[](const Item& it) const {
- return container[iimap.get(it)].prio;
+ return container[iimap[it]].prio;
}
- const PrioType get(const Item& it) const {
- return container[iimap.get(it)].prio;
- }
-
-
+// const PrioType get(const Item& it) const {
+// return container[iimap[it]].prio;
+// }
void pop() {
/*The first case is that there are only one root.*/
@@ -192,7 +190,7 @@
void erase (const Item& it) {
- int i=iimap.get(it);
+ int i=iimap[it];
if ( i >= 0 && container[i].in ) {
if ( container[i].parent!=-1 ) {
@@ -207,7 +205,7 @@
void decrease (Item it, PrioType const value) {
- int i=iimap.get(it);
+ int i=iimap[it];
container[i].prio=value;
int p=container[i].parent;
@@ -226,7 +224,7 @@
state_enum state(const Item &it) const {
- int i=iimap.get(it);
+ int i=iimap[it];
if( i>=0 ) {
if ( container[i].in ) i=0;
else i=-2;
More information about the Lemon-commits
mailing list