src/work/marci/augmenting_flow.h
changeset 854 baf0b6e40211
parent 777 a82713ed19f3
child 862 732f2acb7239
equal deleted inserted replaced
2:643a0607aa0c 3:b87944b63826
  1259       if (e!=INVALID) {
  1259       if (e!=INVALID) {
  1260 	if (bfs.isBNodeNewlyReached()) {
  1260 	if (bfs.isBNodeNewlyReached()) {
  1261 	  dist.set(res_graph.head(e), dist[res_graph.tail(e)]+1);
  1261 	  dist.set(res_graph.head(e), dist[res_graph.tail(e)]+1);
  1262 	  typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph.tail(e)],
  1262 	  typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph.tail(e)],
  1263 					res_graph_to_F[res_graph.head(e)]);
  1263 					res_graph_to_F[res_graph.head(e)]);
  1264 	  original_edge.update();
  1264 	  //original_edge.update();
  1265 	  original_edge.set(f, e);
  1265 	  original_edge.set(f, e);
  1266 	  residual_capacity.update();
  1266 	  //residual_capacity.update();
  1267 	  residual_capacity.set(f, res_graph.resCap(e));
  1267 	  residual_capacity.set(f, res_graph.resCap(e));
  1268 	} else {
  1268 	} else {
  1269 	  if (dist[res_graph.head(e)]==(dist[res_graph.tail(e)]+1)) {
  1269 	  if (dist[res_graph.head(e)]==(dist[res_graph.tail(e)]+1)) {
  1270 	    typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph.tail(e)],
  1270 	    typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph.tail(e)],
  1271 					  res_graph_to_F[res_graph.head(e)]);
  1271 					  res_graph_to_F[res_graph.head(e)]);
  1272 	    original_edge.update();
  1272 	    //original_edge.update();
  1273 	    original_edge.set(f, e);
  1273 	    original_edge.set(f, e);
  1274 	    residual_capacity.update();
  1274 	    //residual_capacity.update();
  1275 	    residual_capacity.set(f, res_graph.resCap(e));
  1275 	    residual_capacity.set(f, res_graph.resCap(e));
  1276 	  }
  1276 	  }
  1277 	}
  1277 	}
  1278       }
  1278       }
  1279       ++bfs;
  1279       ++bfs;
  1292       typename MG::template NodeMap<Num> free(F);
  1292       typename MG::template NodeMap<Num> free(F);
  1293 
  1293 
  1294       dfs.pushAndSetReached(sF);
  1294       dfs.pushAndSetReached(sF);
  1295       while (!dfs.finished()) {
  1295       while (!dfs.finished()) {
  1296 	++dfs;
  1296 	++dfs;
  1297 	if (F.valid(/*typename MG::OutEdgeIt*/(dfs))) {
  1297 	if (typename MG::Edge(dfs)!=INVALID) {
  1298 	  if (dfs.isBNodeNewlyReached()) {
  1298 	  if (dfs.isBNodeNewlyReached()) {
  1299 	    typename MG::Node v=F.tail(dfs);
  1299 	    typename MG::Node v=F.tail(dfs);
  1300 	    typename MG::Node w=F.head(dfs);
  1300 	    typename MG::Node w=F.head(dfs);
  1301 	    pred.set(w, dfs);
  1301 	    pred.set(w, dfs);
  1302 	    if (pred[v]!=INVALID) {
  1302 	    if (pred[v]!=INVALID) {
  1309 	      _augment=true;
  1309 	      _augment=true;
  1310 	      break;
  1310 	      break;
  1311 	    }
  1311 	    }
  1312 
  1312 
  1313 	  } else {
  1313 	  } else {
  1314 	    F.erase(/*typename MG::OutEdgeIt*/(dfs));
  1314 	    F.erase(typename MG::Edge(dfs));
  1315 	  }
  1315 	  }
  1316 	}
  1316 	}
  1317       }
  1317       }
  1318 
  1318 
  1319       if (__augment) {
  1319       if (__augment) {