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 1

1 0 1 0 0

0 1 0 0 0

0 0 0 0 1

1 0 0 1 0

Input:N = 3, M = 4, arr[][] = { { 1, 2 }, { 2, 3 }, { 3, 1 }, { 2, 2 } }

Output:

0 1 1

1 1 1

1 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[][]**.

Below is the implementation of the above approach:

`// C program for the above approach ` `#include <stdio.h> ` ` ` `// N vertices and M Edges ` `int` `N, M; ` ` ` `// Function to create Adjacency Matrix ` `void` `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 Matrix ` `void` `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 Code ` `int` `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; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

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(N^{2})*, where N is the number of vertices in a graph.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- Convert Adjacency List to Adjacency Matrix representation of a Graph
- Comparison between Adjacency List and Adjacency Matrix representation of Graph
- Convert Adjacency Matrix to Adjacency List representation of Graph
- Add and Remove Edge in Adjacency Matrix representation of a Graph
- Add and Remove vertex in Adjacency Matrix representation of Graph
- Add and Remove Edge in Adjacency List representation of a Graph
- DFS for a n-ary tree (acyclic graph) represented as adjacency list
- Add and Remove vertex in Adjacency List representation of Graph
- Implementation of BFS using adjacency matrix
- Implementation of DFS using adjacency matrix
- Kruskal's Algorithm (Simple Implementation for Adjacency Matrix)
- Prim's Algorithm (Simple Implementation for Adjacency Matrix Representation)
- Lex program to implement a simple Calculator
- Program to check diagonal matrix and scalar matrix
- Program to convert given Matrix to a Diagonal Matrix
- Program to check if a matrix is Binary matrix or not
- C++ program to Convert a Matrix to Sparse Matrix
- C Program to Detect Cycle in a Directed Graph
- Program to Calculate the Edge Cover of a Graph
- Program to find Circuit Rank of an Undirected Graph

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.