package com.interview.graph; import java.util.HashSet; import java.util.LinkedList; import java.util.Queue; import java.util.Set; /** * http://www.geeksforgeeks.org/breadth-first-traversal-for-a-graph/ * http://www.geeksforgeeks.org/depth-first-traversal-for-a-graph/ */ public class GraphTraversal { public void DFS(Graph<Integer> graph){ Set<Long> visited = new HashSet<Long>(); for(Vertex<Integer> vertex : graph.getAllVertex()){ if(!visited.contains(vertex.getId())){ DFSUtil(vertex,visited); } } } private void DFSUtil(Vertex<Integer> v,Set<Long> visited){ visited.add(v.getId()); System.out.print(v.getId() + " "); for(Vertex<Integer> vertex : v.getAdjacentVertexes()){ if(!visited.contains(vertex.getId())) DFSUtil(vertex,visited); } } public void BFS(Graph<Integer> graph){ Set<Long> visited = new HashSet<Long>(); Queue<Vertex<Integer>> q = new LinkedList<Vertex<Integer>>(); for(Vertex<Integer> vertex: graph.getAllVertex()){ if(!visited.contains(vertex.getId())){ q.add(vertex); visited.add(vertex.getId()); while(q.size() != 0){ Vertex<Integer> vq = q.poll(); System.out.print(vq.getId()+ " "); for(Vertex<Integer> v : vq.getAdjacentVertexes()){ if(!visited.contains(v.getId())){ q.add(v); visited.add(v.getId()); } } } } } } public static void main(String args[]){ Graph<Integer> graph = new Graph<Integer>(true); graph.addEdge(1, 2); graph.addEdge(1, 3); graph.addEdge(2, 4); graph.addEdge(3, 4); graph.addEdge(4, 6); graph.addEdge(6, 5); // graph.addEdge(5, 1); graph.addEdge(5,3); GraphTraversal g = new GraphTraversal(); g.BFS(graph); } }