C program to implement Adjacency Matrix of a given Graph - GeeksforGeeks

21 May, 2020
Given a undirected Graph of N vertices 1 to N and M edges in form of 2D array arr[][] whose every row consists of two numbers X and Y which denotes that there is a edge between X and Y, the task is to write C program to create Adjacency Matrix of the given Graph.
Examples:
Input: N = 5, M = 4, arr[][] = { { 1, 2 }, { 2, 3 }, { 4, 5 }, { 1, 5 } }Output:0 1 0 0 11 0 1 0 00 1 0 0 00 0 0 0 11 0 0 1 0
Input: N = 3, M = 4, arr[][] = { { 1, 2 }, { 2, 3 }, { 3, 1 }, { 2, 2 } }Output:0 1 11 1 11 1 0
Approach: The idea is to use a square Matrix of size NxN to create Adjacency Matrix. Below are the steps:
Create a 2D array(say Adj[N+1][N+1]) of size NxN and initialise all value of this matrix to zero.For each edge in arr[][](say X and Y), Update value at Adj[X][Y] and Adj[Y][X] to 1, denotes that there is a edge between X and Y.Display the Adjacency Matrix after the above operation for all the pairs in arr[][].
Create a 2D array(say Adj[N+1][N+1]) of size NxN and initialise all value of this matrix to zero.
For each edge in arr[][](say X and Y), Update value at Adj[X][Y] and Adj[Y][X] to 1, denotes that there is a edge between X and Y.
Display the Adjacency Matrix after the above operation for all the pairs in arr[][].
Below is the implementation of the above approach:
// C program for the above approach#include <stdio.h>  // N vertices and M Edgesint N, M;  // Function to create Adjacency Matrixvoid createAdjMatrix(int Adj[][N + 1],                     int arr[][2]){      // Initialise all value to this    // Adjacency list to zero    for (int i = 0; i < N + 1; i++) {          for (int j = 0; j < N + 1; j++) {            Adj[i][j] = 0;        }    }      // Traverse the array of Edges    for (int i = 0; i < M; i++) {          // Find X and Y of Edges        int x = arr[i][0];        int y = arr[i][1];          // Update value to 1        Adj[x][y] = 1;        Adj[y][x] = 1;    }}  // Function to print the created// Adjacency Matrixvoid printAdjMatrix(int Adj[][N + 1]){      // Traverse the Adj[][]    for (int i = 1; i < N + 1; i++) {        for (int j = 1; j < N + 1; j++) {              // Print the value at Adj[i][j]            printf("%d ", Adj[i][j]);        }        printf("\n");    }}  // Driver Codeint main(){      // Number of vertices    N = 5;      // Given Edges    int arr[][2]        = { { 1, 2 }, { 2, 3 },             { 4, 5 }, { 1, 5 } };      // Number of Edges    M = sizeof(arr) / sizeof(arr[0]);      // For Adjacency Matrix    int Adj[N + 1][N + 1];      // Function call to create    // Adjacency Matrix    createAdjMatrix(Adj, arr);      // Print Adjacency Matrix    printAdjMatrix(Adj);      return 0;}
0 1 0 0 1 
1 0 1 0 0 
0 1 0 0 0 
0 0 0 0 1 
1 0 0 1 0

Time Complexity: O(N2), where N is the number of vertices in a graph.
C Programs
Data Structures
Graph
Matrix
Data Structures
Matrix
Graph
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
C Program to read contents of Whole File
Regular expressions in C
C / C++ Program for Dijkstra's shortest path algorithm | Greedy Algo-7
Producer Consumer Problem in C
Handling multiple clients on server with multithreading using Socket Programming in C/C++
Difference between Stack and Queue Data Structures
Difference between Singly linked list and Doubly linked list
Multilevel Linked List
Types of Linked List
FIFO vs LIFO approach in Programming