Skip to content

Instantly share code, notes, and snippets.

@divyakali
Created August 2, 2015 19:07
Show Gist options
  • Save divyakali/c7af161cdf49ce9d863c to your computer and use it in GitHub Desktop.
Save divyakali/c7af161cdf49ce9d863c to your computer and use it in GitHub Desktop.
Graph Traversals
public class GraphNode{
int vertex;
ArrayList<Integer> edges = new ArrayList<Integer>();
public GraphNode(int vertex,ArrayList<Integer> edges){
this.vertex = vertex;
this.edges = edges;
}
public ArrayList<Integer> getEdges(){return edges;}
public String toString(){
StringBuffer str = new StringBuffer();
for(int i=0;i<edges.size();i++)
str.append(edges.get(i)+" ");
str.append("\n");
return str.toString();
}
public static void BFS(int vertex,ArrayList<GraphNode> graph){
System.out.println("Breadth first Traversal:");
LinkedList<Integer> vertexQueue = new LinkedList<Integer>();
boolean[] visited = new boolean[graph.size()];
visited[vertex]= true;
System.out.println(vertex);
vertexQueue.addLast(vertex);
while(vertexQueue.size()>0){
int v = vertexQueue.removeFirst();
ArrayList<Integer> listOfVertices = graph.get(v).getEdges();
for(int e:listOfVertices){
if(!visited[e])
{
System.out.println(e);
visited[e]=true;
vertexQueue.addLast(e);
}
}
}
}
public static void DFS(int vertex,ArrayList<GraphNode> graph){
System.out.println("Depth First Traversal:");
Stack<Integer> stack = new Stack<Integer>();
boolean[] visited = new boolean[graph.size()];
visited[vertex]=true;
stack.push(vertex);
ArrayList<Integer> edges =null;
int v;
while(stack.size()!=0){
v= stack.pop();
System.out.println(v);
edges = graph.get(v).getEdges();
for(int tmp:edges){
if(!visited[tmp])
{
visited[tmp]=true;
stack.push(tmp);
}
}
}
}
public static void main(String[] args){
/*Scanner scanner = new Scanner(System.in);
System.out.println("Constructing a graph:");
System.out.println("Enter the number of vertices:");
int vertices = scanner.nextInt();
GraphNode g = null;
ArrayList<GraphNode> graph = new ArrayList<GraphNode>();
for(int vertex=0; vertex<vertices;vertex++){
ArrayList listOfVertices= new ArrayList<Integer>();
System.out.println("Enter the edges for "+vertex+" and press enter -1 to esape:");
String input = scanner.next();
while(!input.equals("-1")){
listOfVertices.add(Integer.parseInt(input));
input = scanner.next();
}
g= new GraphNode( vertex, listOfVertices);
graph.add(g);
}
for(int i=0; i<graph.size(); i++){
System.out.print(i+"->"+graph.get(i));
}*/
ArrayList<GraphNode> graph=new ArrayList<GraphNode>();
ArrayList<Integer> edges = new ArrayList<Integer>();
edges.add(1);
edges.add(2);
graph.add(0,new GraphNode(0, edges));
edges = new ArrayList<Integer>();
edges.add(0);
edges.add(2);
edges.add(3);
graph.add(1,new GraphNode(1, edges));
edges = new ArrayList<Integer>();
edges.add(0);
edges.add(1);
edges.add(4);
graph.add(2,new GraphNode(2, edges));
edges = new ArrayList<Integer>();
edges.add(1);
edges.add(5);
graph.add(3,new GraphNode(3, edges));
edges = new ArrayList<Integer>();
edges.add(2);
edges.add(5);
graph.add(4,new GraphNode(4, edges));
edges = new ArrayList<Integer>();
edges.add(3);
edges.add(4);
edges.add(6);
graph.add(5,new GraphNode(5, edges));
edges = new ArrayList<Integer>();
edges.add(5);
graph.add(6,new GraphNode(6, edges));
for(int i=0; i<graph.size(); i++){
System.out.print(i+"->"+graph.get(i));
}
GraphNode.BFS(0, graph);
GraphNode.DFS(0, graph);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment