Я пытался использовать топологическую сортировку на графе, который использует карту двух вершин. Код для графика ниже. Я был в состоянии построить график и использовать TopoSort раньше, но это было на целых числах. Я скопировал этот Toposort в попытке переключить его на строки. Второй блок кода - это то, что у меня есть. Я попытался превратить карту в массив, чтобы я мог использовать итератор, как я делал раньше, но .iterator () не будет работать. Есть ли более простой способ сделать Toposort? как бы это исправить?
График:
public class Graph extends Vertex {
//creates a map of the adjacent vertices
public Map<Vertex, List<Vertex>> adjVertices;
Graph() {
this.adjVertices = new HashMap<>();
}
void addVertex(String label) {
adjVertices.putIfAbsent(new Vertex(label), new ArrayList<>());
}
void addEdge(String label1, String label2) {
Vertex v1 = new Vertex(label1);
Vertex v2 = new Vertex(label2);
if (adjVertices.get(v1) != null) {
adjVertices.get(v1).add(v2);
}
if (adjVertices.get(v2) != null) {
adjVertices.get(v2).add(v1);
}
}
public int getSize() {
return adjVertices.size();
}
}
Топологическая сортировка:
public class TopoSort {
Graph g = new Graph();
int size = g.getSize();
//this creates an array from the map
Object[] adj = g.adjVertices.entrySet().toArray();
void topologicalSortUtil(int v, boolean visited[], Stack stack) {
// Mark the current node as visited.
visited[v] = true;
int i;
Iterator<Integer> it = adj[v].iterator();
while (it.hasNext())
{
i = it.next();
if (!visited[i]) {
topologicalSortUtil( i, visited, stack );
}
}
// Push current vertex to stack which stores result
stack.push(new Integer(v));
}
// The function to do Topological Sort. It uses
// recursive topologicalSortUtil()
void topologicalSort()
{
Stack stack = new Stack();
// Mark all the vertices as not visited
boolean visited[] = new boolean[size];
for (int i = 0; i < size; i++)
visited[i] = false;
// Call the recursive helper function to store
// Topological Sort starting from all vertices
// one by one
for (int i = 0; i < size; i++) {
if (visited[i] == false) {
topologicalSortUtil( i, visited, stack );
}
}
// Print contents of stack
while (stack.empty()==false) {
System.out.print(stack.pop() + " " );
}
}
}