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.
You are given an undirected graph A. The problem P asks, if there exists a cycle...
You are given an undirected graph A. The problem P asks, if there exists a cycle that contains more than half of the nodes in graph A? Is this problem in NP(nondeterministic polynomial time)? How is it related to the Hamiltonian cycle problem? Construct your example in python. Input: Graph A as either an edge list or adjacent list. Output: Yes or No. If the output is yes, display the cycle as a sequence of nodes.
Write a C++ or Java program name that conducts the BFS traversal of a graph and...
Write a C++ or Java program name that conducts the BFS traversal of a graph and displays city names in the range of hop(s) from a starting city Input format: This is a sample input from a user. 4 Monterey LA SF SD 6 Monterey LA LA SD SD Monterey SF Monterey SF LA SF SD Monterey 2 The first line (= 4 in the example) indicates that there are four vertices in the graph. The following four lines describe...
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 Java program that reads an input graph data from a user. Then, it should...
Write a 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 of vertices 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 0...
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.
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT