DFSGraph.java 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import java.util.*;
  2. public class DFSGraph {
  3. // Recursive function for DFS traversal
  4. private static void
  5. dfsRec(ArrayList<ArrayList<Integer> > adj,
  6. boolean[] visited, int s, ArrayList<Integer> res)
  7. {
  8. visited[s] = true;
  9. res.add(s);
  10. // Recursively visit all adjacent vertices that are
  11. // not visited yet
  12. for (int i : adj.get(s)) {
  13. if (!visited[i]) {
  14. dfsRec(adj, visited, i, res);
  15. }
  16. }
  17. }
  18. // Main DFS function that initializes the visited array
  19. // and calls dfsRec
  20. public static ArrayList<Integer>
  21. DFS(ArrayList<ArrayList<Integer> > adj)
  22. {
  23. boolean[] visited = new boolean[adj.size()];
  24. ArrayList<Integer> res = new ArrayList<>();
  25. dfsRec(adj, visited, 0, res);
  26. return res;
  27. }
  28. // To add an edge in an undirected graph
  29. public static void
  30. addEdge(ArrayList<ArrayList<Integer> > adj, int s,
  31. int t)
  32. {
  33. adj.get(s).add(t);
  34. adj.get(t).add(s);
  35. }
  36. public static void main(String[] args)
  37. {
  38. int V = 5;
  39. ArrayList<ArrayList<Integer> > adj
  40. = new ArrayList<>();
  41. // Initialize adjacency list
  42. for (int i = 0; i < V; i++) {
  43. adj.add(new ArrayList<>());
  44. }
  45. // Add edges
  46. int[][] edges= { { 1, 2 },{ 1, 0 },{ 2, 0 },{ 2, 3 },{ 2, 4 } };
  47. for (int[] e : edges)
  48. {
  49. addEdge(adj, e[0], e[1]);
  50. }
  51. // Perform DFS starting from vertex 0
  52. ArrayList<Integer> res = DFS(adj);
  53. for (int i = 0; i < res.size(); i++) {
  54. System.out.print(res.get(i) + " ");
  55. }
  56. }
  57. }