Add and Remove Edge in Adjacency Matrix representation of a Graph
Prerequisites: Graph and its representations
Given 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 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
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 0
Adjacency 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++
// 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 Code int 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
// 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 Code class 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
# 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 Graph obj = 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 print ( "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 print ( "\nAdjacency matrix after " "edge removal:\n" ) obj.displayAdjacencyMatrix(); # This code is contributed by amarjeet_singh |
C#
// C# program to add and remove edge // in adjacency matrix representation // of a graph using System; class Graph{ // Number of vertices private int n; // Adjacency matrix private int [,] g = new int [10, 10]; // Constructor public 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) { Console.WriteLine(); for ( int j = 0; j < n; ++j) { Console.Write( " " + g[i, j]); } } } // Function to update adjacency // matrix for edge insertion public 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 removal public 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 code public 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 |
Javascript
<script> // Javascript program to add and remove edge // in adjacency matrix representation // of a graph // Number of vertices var n = 0; // Adjacency matrix var g = Array.from(Array(10), ()=>Array(10).fill(0)); // Constructor function 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 matrix function 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 insertion function 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 removal function 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 Graph initialize(6); // Adding edges to the graph addEdge(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 matrix document.write( "Adjacency matrix after " + "edge insertions:<br>" ); displayAdjacencyMatrix(); // Removing the edge between vertices // "2" and "3" from the graph removeEdge(2, 3); // The adjacency matrix after // removing the edge document.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)