Source of 29.24.java


  1: public int getShortestPath(T begin, T end, StackInterface<T> path)
  2: {
  3:    resetVertices();
  4:    boolean done = false;
  5:    QueueInterface<VertexInterface<T>> vertexQueue = new LinkedQueue<>();
  6:    VertexInterface<T> originVertex = vertices.getValue(begin);
  7:    VertexInterface<T> endVertex = vertices.getValue(end);
  8:    originVertex.visit();
  9:    // Assertion: resetVertices() has executed setCost(0)
 10:    // and setPredecessor(null) for originVertex
 11:    vertexQueue.enqueue(originVertex);
 12:    while (!done && !vertexQueue.isEmpty())
 13:    {
 14:       VertexInterface<T> frontVertex = vertexQueue.dequeue();
 15:       Iterator<VertexInterface<T>> neighbors =
 16:       frontVertex.getNeighborIterator();
 17:       while (!done && neighbors.hasNext())
 18:       {
 19:          VertexInterface<T> nextNeighbor = neighbors.next();
 20:          if (!nextNeighbor.isVisited())
 21:          {
 22:             nextNeighbor.visit();
 23:             nextNeighbor.setCost(1 + frontVertex.getCost());
 24:             nextNeighbor.setPredecessor(frontVertex);
 25:             vertexQueue.enqueue(nextNeighbor);
 26:          } // end if
 27:          if (nextNeighbor.equals(endVertex))
 28:             done = true;
 29:       } // end while
 30:    } // end while
 31:    // Traversal ends; construct shortest path
 32:    int pathLength = (int)endVertex.getCost();
 33:    path.push(endVertex.getLabel());
 34:    VertexInterface<T> vertex = endVertex;
 35:    while (vertex.hasPredecessor())
 36:    {
 37:       vertex = vertex.getPredecessor();
 38:       path.push(vertex.getLabel());
 39:    } // end while
 40:    return pathLength;
 41: } // end getShortestPath
 42: // Version 4.0