| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- // Java program to implement Graph
- // with the help of Generics
- import java.util.*;
- class Graph<T> {
- // We use Hashmap to store the edges in the graph
- private Map<T, List<T> > map = new HashMap<>();
- // This function adds a new vertex to the graph
- public void addVertex(T s)
- {
- map.put(s, new LinkedList<T>());
- }
- // This function adds the edge
- // between source to destination
- public void addEdge(T source, T destination,
- boolean bidirectional)
- {
- if (!map.containsKey(source))
- addVertex(source);
- if (!map.containsKey(destination))
- addVertex(destination);
- map.get(source).add(destination);
- if (bidirectional == true) {
- map.get(destination).add(source);
- }
- }
- // This function gives the count of vertices
- public void getVertexCount()
- {
- System.out.println("The graph has "
- + map.keySet().size()
- + " vertex");
- }
- // This function gives the count of edges
- public void getEdgesCount(boolean bidirection)
- {
- int count = 0;
- for (T v : map.keySet()) {
- count += map.get(v).size();
- }
- if (bidirection == true) {
- count = count / 2;
- }
- System.out.println("The graph has " + count
- + " edges.");
- }
- // This function gives whether
- // a vertex is present or not.
- public void hasVertex(T s)
- {
- if (map.containsKey(s)) {
- System.out.println("The graph contains " + s
- + " as a vertex.");
- }
- else {
- System.out.println("The graph does not contain "
- + s + " as a vertex.");
- }
- }
- // This function gives whether an edge is present or
- // not.
- public void hasEdge(T s, T d)
- {
- if (map.get(s).contains(d)) {
- System.out.println(
- "The graph has an edge between " + s
- + " and " + d + ".");
- }
- else {
- System.out.println(
- "The graph has no edge between " + s
- + " and " + d + ".");
- }
- }
-
- public void neighbours(T s)
- {
- if(!map.containsKey(s))
- return ;
- System.out.println("The neighbours of "+s+" are");
- for(T w:map.get(s))
- System.out.print(w+",");
- }
- // Prints the adjancency list of each vertex.
- @Override public String toString()
- {
- StringBuilder builder = new StringBuilder();
- for (T v : map.keySet()) {
- builder.append(v.toString() + ": ");
- for (T w : map.get(v)) {
- builder.append(w.toString() + " ");
- }
- builder.append("\n");
- }
- return (builder.toString());
- }
- }
- // Driver Code
- public class Graph_generic {
- public static void main(String args[])
- {
- // Object of graph is created.
-
- Graph<Integer> g = new Graph<Integer>();
- // edges are added.
- // Since the graph is bidirectional,
- // so boolean bidirectional is passed as true.
- g.addEdge(0, 1, true);
- g.addEdge(0, 4, true);
- g.addEdge(1, 2, true);
- g.addEdge(1, 3, true);
- g.addEdge(1, 4, true);
- g.addEdge(2, 3, true);
- g.addEdge(3, 4, true);
- // Printing the graph
- System.out.println("Graph:\n" + g.toString());
- // Gives the no of vertices in the graph.
- g.getVertexCount();
- // Gives the no of edges in the graph.
- g.getEdgesCount(true);
- // Tells whether the edge is present or not.
- g.hasEdge(3, 4);
- // Tells whether vertex is present or not
- g.hasVertex(5);
- g.neighbours(1);
- }
- }
|