public static List sort(GraphDefiner definer) {
List< V > values = definer.getValues();
Map< R, Vertex< R > > vertices = new HashMap< R, Vertex< R > >();
// Creating a vertex for each representation
for (V v : values) {
R rep = definer.getRepresentation(v);
vertices.put(rep, new Vertex< R >(rep));
}
// Connecting neighbourhooding vertices
for (V v : values) {
for (V vn : definer.getNeighbours(v)) {
vertices.get(definer.getRepresentation(v)).addNeighbour(vertices.get(definer.getRepresentation(vn)));
}
}
// Sorting the representations
List< R > sortedReps = new TopologicalSort< R >().sort(vertices.values());
// Transforming the sorted representations to sorted values
List< V > sortedValues = new ArrayList< V >(sortedReps.size());
for (R rep : sortedReps) {
sortedValues.add(definer.getValue(rep));
}
return sortedValues;
}
Sorts a graph topologically. |