Graph Representation using Adjacency List and Matrix in Java

 

 

This Java program demonstrates the implementation of a graph using both an adjacency list and an adjacency matrix. This allows for a comparison of two primary methods of graph representation in terms of space and time efficiency.

Java Code

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;

class Graph {
    private int V;   // Number of vertices
    private LinkedList<Integer> adjList[]; // Adjacency List
    private int adjMatrix[][]; // Adjacency Matrix

    public Graph(int V) {
        this.V = V;
        adjList = new LinkedList[V];
        for (int i = 0; i < V; i++) {
            adjList[i] = new LinkedList<>();
        }
        
        adjMatrix = new int[V][V];
    }

    public void addEdgeList(int v, int w) {
        adjList[v].add(w);
        adjList[w].add(v); // Add w to v's list and vice versa for undirected graph
    }

    public void addEdgeMatrix(int v, int w) {
        adjMatrix[v][w] = 1;
        adjMatrix[w][v] = 1; // Mark the edges from v to w and w to v as true
    }

    public void printAdjList() {
        System.out.println("Adjacency List:");
        for (int i = 0; i < V; i++) {
            System.out.print(i + ": ");
            for (int node : adjList[i]) {
                System.out.print(node + " ");
            }
            System.out.println();
        }
    }

    public void printAdjMatrix() {
        System.out.println("Adjacency Matrix:");
        for (int i = 0; i < V; i++) {
            for (int j = 0; j < V; j++) {
                System.out.print(adjMatrix[i][j] + " ");
            }
            System.out.println();
        }
    }
}

public class GraphDemo {
    public static void main(String[] args) {
        Graph g = new Graph(4); // Create a graph with 4 vertices

        g.addEdgeList(0, 1);
        g.addEdgeList(0, 2);
        g.addEdgeList(1, 2);
        g.addEdgeList(2, 3);

        g.addEdgeMatrix(0, 1);
        g.addEdgeMatrix(0, 2);
        g.addEdgeMatrix(1, 2);
        g.addEdgeMatrix(2, 3);

        g.printAdjList();
        g.printAdjMatrix();
    }
}

Explanation of the Code

The program defines a Graph class to represent the graph using both an adjacency list and an adjacency matrix:

  • Graph Constructor: Initializes the adjacency list and matrix for the number of vertices provided.
  • addEdgeList and addEdgeMatrix Methods: These methods are used to add edges between vertices in the adjacency list and matrix, respectively.
  • printAdjList and printAdjMatrix Methods: These methods display the graph as represented by the adjacency list and matrix, showcasing the graph’s structure visually in the console.

This dual representation in a single program provides insight into the trade-offs between the two methods, including the ease of edge insertion and space complexity.

 

Leave a Reply

Your email address will not be published. Required fields are marked *