I have a working int Topological sorting class. but I need to change my methods to take string "a", "b" instead of integers, but the problem is that the methods that also count the nodes are also being used for the arraylist so I've been trying for weeks just to change or but it always says bad conversion, or cannot be converted to int, even when there isn't an int in my class(at one point) so my problem is all I want is for it to say q.addEdge("a","b"); here is my code, any help at all maybe to turn this into nodes or strings and I would be forever in your debt.
// A Java program to print topological sorting of a graph
// using indegrees
import java.util.*;
//Class to represent a graph
class Graph
{
int V;// No. of vertices
//An Array of List which contains
//references to the Adjacency List of
//each vertex
List <Integer> adj[];
public Graph(int V){//constructor
this.V = V;
adj = new ArrayList[V];
for(int i = 0; i < V; i++)
adj[i]=new ArrayList<Integer>();
}
// function to add an tasks to tree
public void addEdge(int u,int v){
adj[u].add(v);
}
// prints a Topological Sort of the complete graph
public void topologicalSort(){
// Create a array to store indegrees of all
// vertices. Initialize all indegrees as 0.
int indegree[] = new int[V];
// Traverse adjacency lists to fill indegrees of
// vertices. This step takes O(V+E) time
for(int i = 0; i < V; i++){
ArrayList<Integer> temp = (ArrayList<Integer>) adj[i];
for(int node : temp){
indegree[node]++;
}
}
// Create a queue and enqueue all vertices with
// indegree 0
Queue<Integer> q = new LinkedList<Integer>();
for(int i = 0;i < V; i++){
if(indegree[i]==0)
q.add(i);
}
// Initialize count of visited vertices
int cnt = 0;
// Create a vector to store result (A topological
// ordering of the vertices)
Vector <Integer> topOrder=new Vector<Integer>();
while(!q.isEmpty()){
// Extract front of queue (or perform dequeue)
// and add it to topological order
int u=q.poll();
topOrder.add(u);
// Iterate through all its neighbouring nodes
// of dequeued node u and decrease their in-degree
// by 1
for(int node : adj[u]){
// If in-degree becomes zero, add it to queue
if(--indegree[node] == 0)
q.add(node);
}
cnt++;
}
// Check if there was a cycle
if(cnt != V){
System.out.println("There exists a cycle in the graph");
return ;
}//else{System.out.println("no cycle in the graph");}
// Print topological order
for(int i : topOrder){
System.out.print(i+" ");
}
}
}
// Driver program to test above functions
class Main
{
public static void main(String args[])
{
Graph g=new Graph(8);//must be max number of letters+1
Node one=new Node("a");
Node two=new Node("b");
g.addEdge(one,two);
/*
g.addEdge(1, 4);
g.addEdge(2, 5);
g.addEdge(7, 5);
g.addEdge(5, 4);
g.addEdge(3, 4);
g.addEdge(4, 6);
g.addEdge(2, 4);*/
System.out.println("Following is a Topological Sort");
g.topologicalSort();
}
}