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

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


Author: alpar
Date: Tue Feb 17 15:04:46 2004
New Revision: 120

Modified:
   hugo/trunk/src/work/alpar/f_ed_ka.h

Log:
It is working...


Modified: hugo/trunk/src/work/alpar/f_ed_ka.h
==============================================================================
--- hugo/trunk/src/work/alpar/f_ed_ka.h	(original)
+++ hugo/trunk/src/work/alpar/f_ed_ka.h	Tue Feb 17 15:04:46 2004
@@ -19,6 +19,7 @@
 				      typename Graph::EachNodeIt s,
 				      typename Graph::EachNodeIt t)
   { 
+    typedef typename Graph::NodeIt NodeIt;
     typedef typename Graph::EachNodeIt EachNodeIt;
     typedef typename Graph::EdgeIt EdgeIt;
     typedef typename Graph::EachEdgeIt EachEdgeIt;
@@ -29,10 +30,10 @@
     T flow_val = 0;
     T aug_val;
 
-    for(EachEdgeIt e(G);G.valid(e);G.next(e))
+    for(EachEdgeIt e(G);G.valid(e);G.goNext(e))
       f.set(e,0);
     
-    std::queue<EachNodeIt> bfs_queue;
+    std::queue<NodeIt> bfs_queue;
     typename Graph::NodeMap<int> visited(G); //0: unvisited,
                                              //1: reached by a forward edge
                                              //2: reached by a backward edge
@@ -43,7 +44,7 @@
     
   augment:
     
-    for(EachNodeIt n(G);G.valid(n);G.next(n))
+    for(EachNodeIt n(G);G.valid(n);G.goNext(n))
       visited.set(n,0);
     
     visited.set(s,3);
@@ -55,20 +56,25 @@
     
     while(!bfs_queue.empty() && !visited.get(t))
       {
-	EachNodeIt n(bfs_queue.front());
-	for(OutEdgeIt e(G,n);G.valid(e);G.next(e))
+	NodeIt n(bfs_queue.front());
+	bfs_queue.pop();
+	for(OutEdgeIt e(G,n);G.valid(e);G.goNext(e))
 	  if(f.get(e)<c.get(e) &&   //FIXME: <
 	     !visited.get(G.bNode(e))) 
 	    {
-	      tree.set(G.bNode(e),e);
-	      visited.set(G.bNode(e),1);
+	      NodeIt nn(G.bNode(e)); //It improves nothing
+	      tree.set(nn,e);
+	      visited.set(nn,1);
+	      bfs_queue.push(nn);
 	    }
-	for(InEdgeIt e(G,n);G.valid(e);G.next(e))
+	for(InEdgeIt e(G,n);G.valid(e);G.goNext(e))
 	  if(f.get(e)>0 &&   //FIXME: >
 	     !visited.get(G.bNode(e))) 
 	    {
-	      tree.set(G.bNode(e),e);
-	      visited.set(G.bNode(e),2);
+	      NodeIt nn(G.bNode(e));
+	      tree.set(nn,e);
+	      visited.set(nn,2);
+	      bfs_queue.push(nn);
 	    }
       }
     
@@ -81,12 +87,12 @@
     gn = visited.get(t)==1 ? G.tail(tree.get(t)) : G.head(tree.get(t));
     while(gn!=s) if(visited.get(gn)==1)
       {
-	//FIXME: nonstandars. gcc extension!
+	//FIXME: nonstandard gcc extension!
 	aug_val <?= c.get(tree.get(gn))-f.get(tree.get(gn));
 	gn=G.tail(tree.get(gn));
       }
     else {
-      //FIXME: nonstandars. gcc extension!
+      //FIXME: nonstandard gcc extension!
       aug_val <?= f.get(tree.get(gn));
       gn=G.head(tree.get(gn));
     }



More information about the Lemon-commits mailing list