previous | start

Critical Path Method

int source = 2*N;
int sink   = 2*N + 1;

// build network
EdgeWeightedDigraph G = new EdgeWeightedDigraph(2*N + 2);
for (int i = 0; i < N; i++) {
  double duration = StdIn.readDouble();
  G.addEdge(new DirectedEdge(source, i, 0.0));
  G.addEdge(new DirectedEdge(i+N, sink, 0.0));
  G.addEdge(new DirectedEdge(i, i+N,    duration));

  // precedence constraints
  int M = StdIn.readInt();
  for (int j = 0; j < M; j++) {
    int precedent = StdIn.readInt();
    G.addEdge(new DirectedEdge(N+i, precedent, 0.0));
  }
}

// compute longest path
AcyclicLP lp = new AcyclicLP(G, source);

// print results
System.out.println(" job   start  finish");
System.out.println("--------------------");
for (int i = 0; i < N; i++) {
  System.out.printf("%4d %7.1f %7.1f\n", i, lp.distTo(i), lp.distTo(i+N));
}


previous | start