Add and Remove Edge in Adjacency Matrix representation of a Graph - GeeksforGeeks

30 Jun, 2021
Prerequisites: Graph and its representationsGiven an adjacency matrix g[][] of a graph consisting of N vertices, the task is to modify the matrix after insertion of all edges[] and removal of edge between vertices (X, Y). In an adjacency matrix, if an edge exists between vertices i and j of the graph, then g[i][j] = 1 and g[j][i] = 1. If no edge exists between these two vertices, then g[i][j] = 0 and g[j][i] = 0.
Examples:
Input: N = 6, Edges[] = {{0, 1}, {0, 2}, {0, 3}, {0, 4}, {1, 3}, {2, 3}, {2, 4}, {2, 5}, {3, 5}}, X = 2, Y = 3 Output: Adjacency matrix after edge insertion:0 1 1 1 1 0 1 0 0 1 0 0 1 0 0 1 1 1 1 1 1 0 0 1 1 0 1 0 0 0 0 0 1 1 0 0Adjacency matrix after edge removal:0 1 1 1 1 0 1 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 0 1 1 0 1 0 0 0 0 0 1 1 0 0 Explanation: The graph and the corresponding adjacency matrix after insertion of edges:
The graph after removal and adjacency matrix after removal of edge between vertex X and Y:
Input: N = 6, Edges[] = {{0, 1}, {0, 2}, {0, 3}, {0, 4}, {1, 3}, {2, 3}, {2, 4}, {2, 5}, {3, 5}}, X = 3, Y = 5 Output: Adjacency matrix after edge insertion:0 1 1 1 1 0 1 0 0 1 0 0 1 0 0 1 1 1 1 1 1 0 0 1 1 0 1 0 0 0 0 0 1 1 0 0Adjacency matrix after edge removal:0 1 1 1 1 0 1 0 0 1 0 0 1 0 0 1 1 1 1 1 1 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0
Approach: Initialize a matrix of dimensions N x N and follow the steps below:
Inserting an edge: To insert an edge between two vertices suppose i and j, set the corresponding values in the adjacency matrix equal to 1, i.e. g[i][j]=1 and g[j][i]=1 if both the vertices i and j exists.
Removing an edge: To remove an edge between two vertices suppose i and j, set the corresponding values in the adjacency matrix equal to 0. That is, set g[i][j]=0 and g[j][i]=0 if both the vertices i and j exists.
Below is the implementation of the above approach:
C++
Java
Python3
C#
Javascript
// C++ program to add and remove edge// in the adjacency matrix of a graph #include <iostream>using namespace std; class Graph {private:    // Number of vertices    int n;     // Adjacency matrix    int g[10][10]; public:    // Constructor    Graph(int x)    {        n = x;         // Initializing each element of the        // adjacency matrix to zero        for (int i = 0; i < n; i++) {            for (int j = 0; j < n; j++) {                g[i][j] = 0;            }        }    }     // Function to display adjacency matrix    void displayAdjacencyMatrix()    {        // Displaying the 2D matrix        for (int i = 0; i < n; i++) {            cout << "\n";            for (int j = 0; j < n; j++) {                cout << " " << g[i][j];            }        }    }     // Function to update adjacency    // matrix for edge insertion    void addEdge(int x, int y)    {        // Checks if the vertices        // exist in the graph        if ((x < 0) || (x >= n)) {            cout << "Vertex" << x                 << " does not exist!";        }        if ((y < 0) || (y >= n)) {            cout << "Vertex" << y                 << " does not exist!";        }         // Checks if it is a self edge        if (x == y) {            cout << "Same Vertex!";        }         else {            // Insert edge            g[y][x] = 1;            g[x][y] = 1;        }    }     // Function to update adjacency    // matrix for edge removal    void removeEdge(int x, int y)    {        // Checks if the vertices        // exist in the graph        if ((x < 0) || (x >= n)) {            cout << "Vertex" << x                 << " does not exist!";        }        if ((y < 0) || (y >= n)) {            cout << "Vertex" << y                 << " does not exist!";        }         // Checks if it is a self edge        if (x == y) {            cout << "Same Vertex!";        }         else {            // Remove edge            g[y][x] = 0;            g[x][y] = 0;        }    }}; // Driver Codeint main(){    int N = 6, X = 2, Y = 3;     Graph obj(N);     // Adding edges to the graph    obj.addEdge(0, 1);    obj.addEdge(0, 2);    obj.addEdge(0, 3);    obj.addEdge(0, 4);    obj.addEdge(1, 3);    obj.addEdge(2, 3);    obj.addEdge(2, 4);    obj.addEdge(2, 5);    obj.addEdge(3, 5);     cout << "Adjacency matrix after"         << " edge insertions:\n";    obj.displayAdjacencyMatrix();     obj.removeEdge(X, Y);     cout << "\nAdjacency matrix after"         << " edge removal:\n";    obj.displayAdjacencyMatrix();     return 0;}
// Java program to add and remove edge// in the adjacency matrix of a graph class Graph {     // Number of vertices    private int n;     // Adjacency matrix    private int[][] g = new int[10][10];     // Constructor    Graph(int x)    {        this.n = x;         // Initializing each element of the        // adjacency matrix to zero        for (int i = 0; i < n; ++i) {            for (int j = 0; j < n; ++j) {                g[i][j] = 0;            }        }    }     // Function to display adjacency matrix    public void displayAdjacencyMatrix()    {        // Displaying the 2D matrix        for (int i = 0; i < n; ++i) {            System.out.println();            for (int j = 0; j < n; ++j) {                System.out.print(" " + g[i][j]);            }        }         System.out.println();    }     // Function to update adjacency    // matrix for edge insertion    public void addEdge(int x, int y)    {        // Checks if the vertices exists        if ((x < 0) || (x >= n)) {            System.out.printf("Vertex " + x                              + " does not exist!");        }        if ((y < 0) || (y >= n)) {            System.out.printf("Vertex " + y                              + " does not exist!");        }         // Checks if it is a self edge        if (x == y) {            System.out.println("Same Vertex!");        }         else {            // Insert edge            g[y][x] = 1;            g[x][y] = 1;        }    }     // Function to update adjacency    // matrix for edge removal    public void removeEdge(int x, int y)    {        // Checks if the vertices exists        if ((x < 0) || (x >= n)) {            System.out.printf("Vertex " + x                              + " does not exist!");        }        if ((y < 0) || (y >= n)) {            System.out.printf("Vertex " + y                              + " does not exist!");        }         // Checks if it is a self edge        if (x == y) {            System.out.println("Same Vertex!");        }         else {            // Remove edge            g[y][x] = 0;            g[x][y] = 0;        }    }} // Driver Codeclass Main {    public static void main(String[] args)    {         int N = 6, X = 2, Y = 3;        Graph obj = new Graph(N);         // Inserting edges        obj.addEdge(0, 1);        obj.addEdge(0, 2);        obj.addEdge(0, 3);        obj.addEdge(0, 4);        obj.addEdge(1, 3);        obj.addEdge(2, 3);        obj.addEdge(2, 4);        obj.addEdge(2, 5);        obj.addEdge(3, 5);         System.out.println("Adjacency matrix after"                           + " edge insertions:");        obj.displayAdjacencyMatrix();         obj.removeEdge(2, 3);         System.out.println("\nAdjacency matrix after"                           + " edge removal:");        obj.displayAdjacencyMatrix();    }}
# Python3 program to add and remove edge# in adjacency matrix representation of a graph     class Graph:         # Number of vertices    __n = 0         # Adjacency matrix    __g = [[0 for x in range(10)]              for y in range(10)]             # Constructor    def __init__(self, x):        self.__n = x             # Initializing each element of        # the adjacency matrix to zero        for i in range(0, self.__n):            for j in range(0, self.__n):                self.__g[i][j] = 0                     # Function to display adjacency matrix                def displayAdjacencyMatrix(self):                 # Displaying the 2D matrix        for i in range(0, self.__n):            print()            for j in range(0, self.__n):                print("", self.__g[i][j], end = "")         # Function to update adjacency    # matrix for edge insertion                def addEdge(self, x, y):                 # Checks if the vertices        # exist in the graph        if (x < 0) or (x >= self.__n):            print("Vertex {} does not exist!".format(x))        if (y < 0) or (y >= self.__n):            print("Vertex {} does not exist!".format(y))                     # Checks if it is a self edge        if(x == y):            print("Same Vertex!")         else:                         # Adding edge between the vertices            self.__g[y][x] = 1            self.__g[x][y] = 1         # Function to update adjacency    # matrix for edge removal            def removeEdge(self, x, y):                 # Checks if the vertices        # exist in the graph        if (x < 0) or (x >= self.__n):            print("Vertex {} does not exist!".format(x))        if (y < 0) or (y >= self.__n):            print("Vertex {} does not exist!".format(y))                     # Checks if it is a self edge        if(x == y):            print("Same Vertex!")         else:                         # Remove edge from between            # the vertices            self.__g[y][x] = 0            self.__g[x][y] = 0 # Driver code    # Creating an object of class Graphobj = Graph(6);         # Adding edges to the graphobj.addEdge(0, 1)obj.addEdge(0, 2)obj.addEdge(0, 3)obj.addEdge(0, 4)obj.addEdge(1, 3)obj.addEdge(2, 3)obj.addEdge(2, 4)obj.addEdge(2, 5)obj.addEdge(3, 5)     # Edges added to the adjacency matrixprint("Adjacency matrix after "      "edge insertions:\n")obj.displayAdjacencyMatrix();         # Removing the edge between vertices# "2" and "3" from the graphobj.removeEdge(2, 3);     # The adjacency matrix after# removing the edgeprint("\nAdjacency matrix after "      "edge removal:\n")obj.displayAdjacencyMatrix(); # This code is contributed by amarjeet_singh
// C# program to add and remove edge// in adjacency matrix representation// of a graphusing System;     class Graph{     // Number of verticesprivate int n; // Adjacency matrixprivate int[,] g = new int[10, 10]; // Constructorpublic Graph(int x){    this.n = x;     // Initializing each element of    // the adjacency matrix to zero    for(int i = 0; i < n; ++i)    {        for(int j = 0; j < n; ++j)        {            g[i, j] = 0;        }    }} // Function to display adjacency matrixpublic void displayAdjacencyMatrix(){         // Displaying the 2D matrix    for(int i = 0; i < n; ++i)    {        Console.WriteLine();        for(int j = 0; j < n; ++j)        {            Console.Write(" " + g[i, j]);        }    }} // Function to update adjacency// matrix for edge insertionpublic void addEdge(int x, int y){         // Checks if the vertices exist    // in the graph    if ((x < 0) || (x >= n))    {        Console.WriteLine("Vertex {0} does " +                          "not exist!", x);    }    if ((y < 0) || (y >= n))    {        Console.WriteLine("Vertex {0} does " +                          "not exist!", y);    }     // Checks if it is a self edge    if (x == y)    {        Console.WriteLine("Same Vertex!");    }         else    {                 // Adding edge between the vertices        g[y, x] = 1;        g[x, y] = 1;    }} // Function to update adjacency// matrix for edge removalpublic void removeEdge(int x, int y){         // Checks if the vertices exist    // in the graph    if ((x < 0) || (x >= n))    {        Console.WriteLine("Vertex {0} does" +                          "not exist!", x);    }    if ((y < 0) || (y >= n))    {        Console.WriteLine("Vertex {0} does" +                          "not exist!", y);    }     // Checks if it is a self edge    if (x == y)    {        Console.WriteLine("Same Vertex!");    }         else    {                 // Remove edge from between        // the vertices        g[y, x] = 0;        g[x, y] = 0;    }}}     class GFG{     // Driver codepublic static void Main(String[] args){         // Creating an object of class Graph    Graph obj = new Graph(6);     // Adding edges to the graph    obj.addEdge(0, 1);    obj.addEdge(0, 2);    obj.addEdge(0, 3);    obj.addEdge(0, 4);    obj.addEdge(1, 3);    obj.addEdge(2, 3);    obj.addEdge(2, 4);    obj.addEdge(2, 5);    obj.addEdge(3, 5);     // Edges added to the adjacency matrix    Console.WriteLine("Adjacency matrix after " +                      "edge insertions:\n");    obj.displayAdjacencyMatrix();     // Removing the edge between vertices    // "2" and "3" from the graph    obj.removeEdge(2, 3);         // The adjacency matrix after    // removing the edge    Console.WriteLine("\nAdjacency matrix after " +                      "edge removal:");    obj.displayAdjacencyMatrix();}} // This code is contributed by amarjeet_singh
<script> // Javascript program to add and remove edge// in adjacency matrix representation// of a graph     // Number of verticesvar n = 0; // Adjacency matrixvar g = Array.from(Array(10), ()=>Array(10).fill(0)); // Constructorfunction initialize(x){    n = x;     // Initializing each element of    // the adjacency matrix to zero    for(var i = 0; i < n; ++i)    {        for(var j = 0; j < n; ++j)        {            g[i][j] = 0;        }    }} // Function to display adjacency matrixfunction displayAdjacencyMatrix(){         // Displaying the 2D matrix    for(var i = 0; i < n; ++i)    {        document.write("<br>");        for(var j = 0; j < n; ++j)        {            document.write(" " + g[i][j]);        }    }} // Function to update adjacency// matrix for edge insertionfunction addEdge(x, y){         // Checks if the vertices exist    // in the graph    if ((x < 0) || (x >= n))    {        document.write(`Vertex ${x} does not exist!`);    }    if ((y < 0) || (y >= n))    {        document.write(`Vertex ${y} does not exist!`);    }     // Checks if it is a self edge    if (x == y)    {        document.write("Same Vertex!<br>");    }         else    {                 // Adding edge between the vertices        g[y][x] = 1;        g[x][y] = 1;    }} // Function to update adjacency// matrix for edge removalfunction removeEdge(x, y){         // Checks if the vertices exist    // in the graph    if ((x < 0) || (x >= n))    {        document.write(`Vertex ${x} does not exist!`);    }    if ((y < 0) || (y >= n))    {        document.write(`Vertex ${y} does not exist!`);    }     // Checks if it is a self edge    if (x == y)    {        document.write("Same Vertex!<br>");    }         else    {                 // Remove edge from between        // the vertices        g[y][x] = 0;        g[x][y] = 0;    }}  // Driver code// Creating an object of class Graphinitialize(6);// Adding edges to the graphaddEdge(0, 1);addEdge(0, 2);addEdge(0, 3);addEdge(0, 4);addEdge(1, 3);addEdge(2, 3);addEdge(2, 4);addEdge(2, 5);addEdge(3, 5);// Edges added to the adjacency matrixdocument.write("Adjacency matrix after " +                  "edge insertions:<br>");displayAdjacencyMatrix();// Removing the edge between vertices// "2" and "3" from the graphremoveEdge(2, 3); // The adjacency matrix after// removing the edgedocument.write("<br>Adjacency matrix after " +                  "edge removal:<br>");displayAdjacencyMatrix();  </script>
Adjacency matrix after edge insertions:

 0 1 1 1 1 0
 1 0 0 1 0 0
 1 0 0 1 1 1
 1 1 1 0 0 1
 1 0 1 0 0 0
 0 0 1 1 0 0
Adjacency matrix after edge removal:

 0 1 1 1 1 0
 1 0 0 1 0 0
 1 0 0 0 1 1
 1 1 0 0 0 1
 1 0 1 0 0 0
 0 0 1 1 0 0
Time Complexity: Insertion and Deletion of an edge requires O(1) complexity while it takes O(N2) to display the adjacency matrix. Auxiliary Space: O(N2)
amarjeet_singh
ruhelaa48
noob2000
graph-basics
interview-preparation
Picked
Data Structures
Graph
Matrix
Placements
Recursion
Data Structures
Recursion
Matrix
Graph
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
How to Start Learning DSA?
Introduction to Tree Data Structure
Program to implement Singly Linked List in C++ using class
Hash Functions and list/types of Hash functions
Insertion in a B+ tree
Breadth First Search or BFS for a Graph
Depth First Search or DFS for a Graph
Dijkstra's shortest path algorithm | Greedy Algo-7
Kruskal’s Minimum Spanning Tree Algorithm | Greedy Algo-2
Prim’s Minimum Spanning Tree (MST) | Greedy Algo-5