add edge undirected graph c language adjacency list code example

Example 1: graph using djacency matrix c++

// Adjacency Matrix representation in C++

#include <iostream>
using namespace std;

class Graph {
   private:
  bool** adjMatrix;
  int numVertices;

   public:
  // Initialize the matrix to zero
  Graph(int numVertices) {
    this->numVertices = numVertices;
    adjMatrix = new bool*[numVertices];
    for (int i = 0; i < numVertices; i++) {
      adjMatrix[i] = new bool[numVertices];
      for (int j = 0; j < numVertices; j++)
        adjMatrix[i][j] = false;
    }
  }

  // Add edges
  void addEdge(int i, int j) {
    adjMatrix[i][j] = true;
    adjMatrix[j][i] = true;
  }

  // Remove edges
  void removeEdge(int i, int j) {
    adjMatrix[i][j] = false;
    adjMatrix[j][i] = false;
  }

  // Print the martix
  void toString() {
    for (int i = 0; i < numVertices; i++) {
      cout << i << " : ";
      for (int j = 0; j < numVertices; j++)
        cout << adjMatrix[i][j] << " ";
      cout << "\n";
    }
  }

  ~Graph() {
    for (int i = 0; i < numVertices; i++)
      delete[] adjMatrix[i];
    delete[] adjMatrix;
  }
};

int main() {
  Graph g(4);

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

  g.toString();
}

Example 2: delete node in graph in c

#include<stdio.h>
#define max 20
int adj[ max ][ max ];
int n;
main()
{
    int choice;
    int node, origin, destin;
    create_graph();
    while ( 1 )
        {
            printf( "1.Insert a node\n" );
            printf( "2.Insert an edge\n" );
            printf( "3.Delete a node\n" );
            printf( "4.Delete an edge\n" );
            printf( "5.Dispaly\n" );
            printf( "6.Exit\n" );
            printf( "Enter your choice : " );
            scanf( "%d", &choice );
            switch ( choice )
                {
                case 1:
                    insert_node();
                    break;
                case 2:
                    printf( "Enter an edge to be inserted : " );
                    fflush( stdin );
                    scanf( "%d %d", &origin, &destin );
                    insert_edge( origin, destin );
                    break;
                case 3:
                    printf( "Enter a node to be deleted : " );
                    fflush( stdin );
                    scanf( "%d", &node );
                    delete_node( node );
                    break;
                case 4:
                    printf( "Enter an edge to be deleted : " );
                    fflush( stdin );
                    scanf( "%d %d", &origin, &destin );
                    del_edge( origin, destin );
                    break;
                case 5:
                    display();
                    break;
                case 6:
                    exit();
                default:
                    printf( "Wrong choice\n" );
                    break;
                } /*End of switch*/
        } /*End of while*/
} /*End of main()*/
create_graph()
{
    int i, max_edges, origin, destin;
    printf( "Enter number of nodes : " );
    scanf( "%d", &n );
    max_edges = n * ( n – 1 ); /* Taking directed graph */
    for ( i = 1;i <= max_edges;i++ )
        {
            printf( "Enter edge %d( 0 0 ) to quit : ", i );
            scanf( "%d %d", &origin, &destin );
            if ( ( origin == 0 ) && ( destin == 0 ) )
                break;
            if ( origin > n || destin > n || origin <= 0 || destin <= 0 )
                {
                    printf( "Invalid edge!\n" );
                    i–;
                }
            else
                adj[ origin ][ destin ] = 1;
        } /*End of for*/
} /*End of create_graph()*/
display()
{
    int i, j;
    for ( i = 1;i <= n;i++ )
        {
            for ( j = 1;j <= n;j++ )
                printf( "%4d", adj[ i ][ j ] );
            printf( "\n" );
        }
} /*End of display()*/
insert_node()
{
    int i;
    n++; /*Increase number of nodes in the graph*/
    printf( "The inserted node is %d \n", n );
    for ( i = 1;i <= n;i++ )
        {
            adj[ i ][ n ] = 0;
            adj[ n ][ i ] = 0;
        }
} /*End of insert_node()*/
delete_node( char u )
{
    int i, j;
    if ( n == 0 )
        {
            printf( "Graph is empty\n" );
            return ;
        }
    if ( u > n )
        {
            printf( "This node is not present in the graph\n" );
            return ;
        }
    for ( i = u;i <= n – 1;i++ )
        for ( j = 1;j <= n;j++ )
            {
                adj[ j ][ i ] = adj[ j ][ i + 1 ]; /* Shift columns left */
                adj[ i ][ j ] = adj[ i + 1 ][ j ]; /* Shift rows up */
            }
    n–; /*Decrease the number of nodes in the graph */
} /*End of delete_node*/
insert_edge( char u, char v )
{
    if ( u > n )
        {
            printf( "Source node does not exist\n" );
            return ;
        }
    if ( v > n )
        {
            printf( "Destination node does not exist\n" );
            return ;
        }
    adj[ u ][ v ] = 1;
} /*End of insert_edge()*/
del_edge( char u, char v )
{
    if ( u > n || v > n || adj[ u ][ v ] == 0 )
        {
            printf( "This edge does not exist\n" );
            return ;
        }
    adj[ u ][ v ] = 0;
} /*End of del_edge()*/

Tags:

Cpp Example