Question

In: Computer Science

Write a program in java that detects if there is a cycle in an undirected graph...

Write a program in java that detects if there is a cycle in an undirected graph using DFS

Two lines of input:

1. Two integers V for the number of vertices and E for the number of edges respectively.

2. List of integers that shows how the graph is connected.

Ex input:

4 4

01020323

Output:

Graph contains cycle

Ex input:

5 4

01020314

Output:

Graph doesn't contains cycle

Solutions

Expert Solution

The solution

// 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 
public class Graph 
{ 
        
        // No. of vertices 
        private int V; 
        
        // Adjacency List Represntation 
        private LinkedList<Integer> adj[]; 

        // Constructor 
        Graph(int v) 
        { 
                V = v; 
                adj = new LinkedList[v]; 
                for(int i=0; i<v; ++i) 
                        adj[i] = new LinkedList(); 
        } 

        // Function to add an edge 
        // into the graph 
        void addEdge(int v,int w) 
        { 
                adj[v].add(w); 
                adj[w].add(v); 
        } 

        // A recursive function that 
        // uses visited[] and parent to detect 
        // cycle in subgraph reachable 
        // from vertex v. 
        Boolean isCyclicUtil(int v, Boolean visited[], int parent) 
        { 
                // Mark the current node as visited 
                visited[v] = true; 
                Integer i; 

                // Recur for all the vertices 
                // adjacent to this vertex 
                Iterator<Integer> 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++) 
                { 
                
                        // Don't recur for u if already visited 
                        if (!visited[u]) 
                                if (isCyclicUtil(u, visited, -1)) 
                                        return true; 
                } 

                return false; 
        } 


        // Driver method to test above methods 
        public static void main(String args[]) 
        {
        
        // Declare the object and initialize with 
        // predefined standard input object 
        Scanner sc = new Scanner(System.in);
        
        // Enter vertices and edges count values:  
        int V = sc.nextInt();
        int E = sc.nextInt();
       
        Graph g = new Graph(V);
        
        // Now start entering pair of vertices between which to make an edge
        for (int i = 0; i < E; i++)
        {
            int j = sc.nextInt();
            int k = sc.nextInt();
            g.addEdge(j, k);   
        } 
                
                if (g.isCyclic()) 
                        System.out.println("Graph contains cycle"); 
                else
                        System.out.println("Graph doesn't contains cycle"); 

        } 
}

Related Solutions

Which graph search method will be better for finding a cycle in an undirected graph: a...
Which graph search method will be better for finding a cycle in an undirected graph: a BTS or a DFS? In detail, describe (create) an algorithm for finding a cycle in any undirected graph, explaining why the algorithm assures to find a cycle if there exists one.
Give an algorithm to detect whether a given undirected graph contains a cycle. If the graph...
Give an algorithm to detect whether a given undirected graph contains a cycle. If the graph contains a cycle, then your algorithm should output one. (It should not output all cycles in the graph, just one of them.) The running time of your algorithm should be O(m + n) for a graph with n nodes and m edges.
Write a C++ or Java program that reads an input graph data from a user. Then,...
Write a C++ or Java program that reads an input graph data from a user. Then, it should present a path for the travelling salesman problem (TSP). In the assignment, you can assume that the maximum number ofvertices in the input graph is less than or equal to 20. Input format: This is a sample input from a user. 4 12 0 1 2 0 3 7 0 2 5 1 0 2 1 2 8 1 3 3 2...
Write a python code to generate a random undirected weighted graph and calculate the shortest distance...
Write a python code to generate a random undirected weighted graph and calculate the shortest distance from node i to node j (shortest path algorithm) where i is not equal to j. Store the results in text file. Thank you!
Write an Arduino Program that detects a reflective surface using the line sensor array of a...
Write an Arduino Program that detects a reflective surface using the line sensor array of a QTR-3RC (*Must be specific to this sensor! please this is important*) Must include a function that when called returns.. 0 (line to the left of the robot) 1 (line under the robot on the left side) 2 (line under the robot on the right side) 3 (line to the right of the robot) Output the results to the serial port in 0.5 second intervals...
Write an Arduino Program that detects a reflective surface using the line sensor array of a...
Write an Arduino Program that detects a reflective surface using the line sensor array of a QTR-3RC (*Must be specific to this sensor! please this is important*) Must include a function that when called returns.. 0 (line to the left of the robot) 1 (line under the robot on the left side) 2 (line under the robot on the right side) 3 (line to the right of the robot) Output the results to the serial port in 0.5 second intervals...
Construct a connected undirected graph with 25 or more nodes. - Draw your graph in a...
Construct a connected undirected graph with 25 or more nodes. - Draw your graph in a diagram. - Draw the adjacency matrix of your graph. - Draw the adjacency list of your graph. - Run the BFS algorithm on your graph and complete the chart discussed in class. Detailed steps, including the changes of node color, predecessor, etc., as discussed in class, are required.
Write a program in java processing. Write a program that does the following: · Assume the...
Write a program in java processing. Write a program that does the following: · Assume the canvas size of 500X500. · The program asks the user to enter a 3 digit number. · The program then checks the value of the first and last digit of the number. · If the first and last digits are even, it makes the background green and displays the three digit number at the mouse pointer. · If the two digits are odd, it...
How to write IO program in java?
How to write IO program in java?
write a Java program Write a program to assign a letter grade according to the following...
write a Java program Write a program to assign a letter grade according to the following scheme: A: total score >= 90 B: 80 <= total score < 90 C: 70 <= total score < 80 D: 60 <= total score < 70 F: total score < 60 Output - the student's total score (float, 2 decimals) and letter grade Testing - test your program with the following input data: test1 = 95; test2 = 80; final = 90; assignments...
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT