package com.sample.app.model;
import java.util.List;
public class Vertex<T extends Comparable<T>> {
private int id;
private List<T> adjacentVertices;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public List<T> getAdjacentVertices() {
return adjacentVertices;
}
public void setAdjacentVertices(List<T> adjacentVertices) {
this.adjacentVertices = adjacentVertices;
}
}
package com.sample.app.model;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class UnDirectedGraph <T extends Comparable<T>> {
private Map<T, Set<T>> graph;
private Map<T, Boolean> visited = new HashMap<>();
private Set<T> distinctVertices = new HashSet<>();;
public UnDirectedGraph() {
graph = new HashMap<>();
}
public void addEdge(T from, T to) {
Set<T> adjacencyList = graph.get(from);
if (adjacencyList == null) {
adjacencyList = new HashSet<T>();
}
adjacencyList.add(to);
graph.put(from, adjacencyList);
distinctVertices.add(from);
distinctVertices.add(to);
}
public Map<T, Set<T>> getGraph() {
return graph;
}
public void setGraph(Map<T, Set<T>> graph) {
this.graph = graph;
}
private Boolean isCyclicUtil(T v, Map<T, Boolean> visited, T parent) {
visited.put(v, true);
T i;
Set<T> adjacencyList = graph.get(v);
if (adjacencyList == null || adjacencyList.isEmpty())
return false;
Iterator<T> it = adjacencyList.iterator();
while (it.hasNext()) {
i = it.next();
if (!visited.get(i)) {
if (isCyclicUtil(i, visited, v))
return true;
}
else if (!i.equals(parent))
return true;
}
return false;
}
public boolean isCycleExist() {
for (T key : distinctVertices) {
visited.put(key, false);
}
for (T key : this.graph.keySet())
if (!visited.get(key))
if (isCyclicUtil(key, visited, null))
return true;
return false;
}
}
package com.sample.app.model;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
public class UndirectedGraphTest {
@Test
public void testCase1() {
UnDirectedGraph g1 = new UnDirectedGraph<Integer>();
g1.addEdge(1, 0);
g1.addEdge(0, 2);
g1.addEdge(2, 1);
g1.addEdge(0, 3);
g1.addEdge(3, 4);
assertTrue(g1.isCycleExist());
}
@Test
public void testCase2() {
UnDirectedGraph g1 = new UnDirectedGraph<Integer>();
g1.addEdge(0, 1);
g1.addEdge(1, 2);
assertFalse(g1.isCycleExist());
}
@Test
public void testCase3() {
UnDirectedGraph g1 = new UnDirectedGraph<Integer>();
assertFalse(g1.isCycleExist());
}
@Test
public void testCase4() {
UnDirectedGraph g1 = new UnDirectedGraph<Integer>();
g1.addEdge(123, 0);
g1.addEdge(0, 123);
g1.addEdge(4232, 123);
g1.addEdge(0, 3);
g1.addEdge(3, 4);
assertTrue(g1.isCycleExist());
}
@Test
public void testCase5() {
UnDirectedGraph g1 = new UnDirectedGraph<Integer>();
g1.addEdge(1, 1);
assertTrue(g1.isCycleExist());
}
@Test
public void testCase6() {
UnDirectedGraph g1 = new UnDirectedGraph<Integer>();
g1.addEdge(1, 2);
g1.addEdge(1, 1);
assertTrue(g1.isCycleExist());
}
@Test
public void testCase7() {
UnDirectedGraph g1 = new UnDirectedGraph<Integer>();
g1.addEdge(1, 2);
g1.addEdge(1, 3);
g1.addEdge(2, 3);
assertTrue(g1.isCycleExist());
}
@Test
public void testCase8() {
UnDirectedGraph g1 = new UnDirectedGraph<Integer>();
g1.addEdge(1, 2);
g1.addEdge(1, 3);
g1.addEdge(2, 3);
g1.addEdge(3, 1);
assertTrue(g1.isCycleExist());
}
@Test
public void testCase9() {
UnDirectedGraph g1 = new UnDirectedGraph<Integer>();
g1.addEdge(1, 2);
g1.addEdge(1, 3);
g1.addEdge(2, 3);
g1.addEdge(3, 4);
g1.addEdge(3, 5);
g1.addEdge(5, 2);
assertTrue(g1.isCycleExist());
}
}
You may
like
Suppose
there are 'N' stairs, a person wants to reach the top. Person can climb either
1 (or) 2 stairs at a time.Count the number of ways that a person can reach the
top.
No comments:
Post a Comment