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++ 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 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 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# 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 |
<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)