Files
CS480-Personal-Navigation-S…/PA5/src/graph/LabelCorrectingAlgorithm.java
T

71 lines
1.6 KiB
Java
Raw Normal View History

2026-05-31 14:39:57 -04:00
package graph;
import java.util.Collections;
import java.util.Map;
import feature.Intersection;
import feature.StreetSegment;
/**
* Label-correcting shortest-path algorithm.
*/
public class LabelCorrectingAlgorithm extends AbstractShortestPathAlgorithm
{
private CandidateLabelManager labels;
/**
* Explicit value constructor.
*
* @param labels candidate label manager
*/
public LabelCorrectingAlgorithm(final CandidateLabelManager labels)
{
this.labels = labels;
}
@Override
public Map<String, StreetSegment> findPath(final int origin, final int destination,
final StreetNetwork net)
{
if (labels == null || net == null)
{
return Collections.emptyMap();
}
Label originLabel = labels.getLabel(origin);
if (originLabel == null)
{
return Collections.emptyMap();
}
originLabel.setValue(0.0);
Intersection originIntersection = net.getIntersection(origin);
if (originIntersection != null)
{
for (StreetSegment segment : originIntersection.getOutbound())
{
labels.adjustHeadValue(segment);
notifyStreetSegmentObservers(segment.getID());
}
}
Label current = labels.getCandidateLabel();
while (current != null)
{
Intersection intersection = net.getIntersection(current.getID());
if (intersection != null)
{
for (StreetSegment segment : intersection.getOutbound())
{
labels.adjustHeadValue(segment);
notifyStreetSegmentObservers(segment.getID());
}
}
current = labels.getCandidateLabel();
}
return buildPath(labels, origin, destination);
}
}