diff --git a/BFS.java b/BFS.java new file mode 100644 index 0000000..e028871 --- /dev/null +++ b/BFS.java @@ -0,0 +1,81 @@ +// Java program to print BFS traversal from a given source vertex. +// BFS(int s) traverses vertices reachable from s. +import java.io.*; +import java.util.*; + +// This class represents a directed graph using adjacency list +// representation +class Graph +{ + private int V; // No. of vertices + private LinkedList adj[]; //Adjacency Lists + + // Constructor + Graph(int v) + { + V = v; + adj = new LinkedList[v]; + for (int i=0; i queue = new LinkedList(); + + // Mark the current node as visited and enqueue it + visited[s]=true; + queue.add(s); + + while (queue.size() != 0) + { + // Dequeue a vertex from queue and print it + s = queue.poll(); + System.out.print(s+" "); + + // Get all adjacent vertices of the dequeued vertex s + // If a adjacent has not been visited, then mark it + // visited and enqueue it + Iterator i = adj[s].listIterator(); + while (i.hasNext()) + { + int n = i.next(); + if (!visited[n]) + { + visited[n] = true; + queue.add(n); + } + } + } + } + + // Driver method to + public static void main(String args[]) + { + Graph g = new Graph(4); + + g.addEdge(0, 1); + g.addEdge(0, 2); + g.addEdge(1, 2); + g.addEdge(2, 0); + g.addEdge(2, 3); + g.addEdge(3, 3); + + System.out.println("Following is Breadth First Traversal "+ + "(starting from vertex 2)"); + + g.BFS(2); + } +} \ No newline at end of file diff --git a/DFS.java b/DFS.java new file mode 100644 index 0000000..6697a31 --- /dev/null +++ b/DFS.java @@ -0,0 +1,73 @@ +// Java program to print DFS traversal from a given given graph +import java.io.*; +import java.util.*; + +// This class represents a directed graph using adjacency list +// representation +class Graph +{ + private int V; // No. of vertices + + // Array of lists for Adjacency List Representation + private LinkedList adj[]; + + // Constructor + Graph(int v) + { + V = v; + adj = new LinkedList[v]; + for (int i=0; i i = adj[v].listIterator(); + while (i.hasNext()) + { + int n = i.next(); + if (!visited[n]) + DFSUtil(n, visited); + } + } + + // The function to do DFS traversal. It uses recursive DFSUtil() + void DFS(int v) + { + // Mark all the vertices as not visited(set as + // false by default in java) + boolean visited[] = new boolean[V]; + + // Call the recursive helper function to print DFS traversal + DFSUtil(v, visited); + } + + public static void main(String args[]) + { + Graph g = new Graph(4); + + g.addEdge(0, 1); + g.addEdge(0, 2); + g.addEdge(1, 2); + g.addEdge(2, 0); + g.addEdge(2, 3); + g.addEdge(3, 3); + + System.out.println("Following is Depth First Traversal "+ + "(starting from vertex 2)"); + + g.DFS(2); + } +} \ No newline at end of file diff --git a/Graph.java b/Graph.java new file mode 100644 index 0000000..15936a5 --- /dev/null +++ b/Graph.java @@ -0,0 +1,99 @@ +// A Java Program to detect cycle in an undirected graph +import java.io.*; +import java.util.*; + +// This class represents a directed graph using adjacency list +// representation +class Graph +{ + private int V; // No. of vertices + private LinkedList adj[]; // Adjacency List Represntation + + // Constructor + Graph(int v) { + V = v; + adj = new LinkedList[v]; + for(int i=0; i it = adj[v].iterator(); + while (it.hasNext()) + { + i = it.next(); + + // If an adjacent is not visited, then recur for that + // adjacent + if (!visited[i]) + { + if (isCyclicUtil(i, visited, v)) + return true; + } + + // If an adjacent is visited and not parent of current + // vertex, then there is a cycle. + else if (i != parent) + return true; + } + return false; + } + + // Returns true if the graph contains a cycle, else false. + Boolean isCyclic() + { + // Mark all the vertices as not visited and not part of + // recursion stack + Boolean visited[] = new Boolean[V]; + for (int i = 0; i < V; i++) + visited[i] = false; + + // Call the recursive helper function to detect cycle in + // different DFS trees + for (int u = 0; u < V; u++) + if (!visited[u]) // Don't recur for u if already visited + if (isCyclicUtil(u, visited, -1)) + return true; + + return false; + } + + + // Driver method to test above methods + public static void main(String args[]) + { + // Create a graph given in the above diagram + Graph g1 = new Graph(5); + g1.addEdge(1, 0); + g1.addEdge(0, 2); + g1.addEdge(2, 0); + g1.addEdge(0, 3); + g1.addEdge(3, 4); + if (g1.isCyclic()) + System.out.println("Graph contains cycle"); + else + System.out.println("Graph doesn't contains cycle"); + + Graph g2 = new Graph(3); + g2.addEdge(0, 1); + g2.addEdge(1, 2); + if (g2.isCyclic()) + System.out.println("Graph contains cycle"); + else + System.out.println("Graph doesn't contains cycle"); + } +} \ No newline at end of file