Graph using adjacency Matrix with BFS and DFS traversals.

 Aim

To implement a Graph using Adjacency Matrix and perform Breadth First Search (BFS) and Depth First Search (DFS) traversals.

Objective

  1. Represent a graph using Adjacency Matrix.

  2. Perform BFS traversal using a queue.

  3. Perform DFS traversal using recursion (stack concept).

  4. Understand the difference between BFS and DFS in exploring nodes.

Algorithm

1. Graph Representation

  1. Start

  2. Initialize adj[n][n] to 0 (no edges).

  3. For each edge (u, v), set adj[u][v] = 1 and adj[v][u] = 1 (for undirected graph).

  4. End.

2. BFS Traversal

  1. Start

  2. Mark the starting vertex as visited and insert into queue.

  3. Repeat until queue is empty:

    • Dequeue a vertex u and print it.

    • For each adjacent vertex v of u, if not visited, mark visited and enqueue it.

  4. End.

3. DFS Traversal

  1. Start

  2. Mark the current vertex as visited and print it.

  3. For each adjacent vertex v of current node:

    • If v is not visited, recursively call DFS on v.

  4. End.

Flowchart

Generated image

C Program: Graph using Adjacency Matrix with BFS and DFS

#include <stdio.h>

#include <stdlib.h>

#define MAX 10

int adj[MAX][MAX];   // adjacency matrix

int visited[MAX];    // visited array for DFS & BFS

int queue[MAX];      // queue for BFS

int front = -1, rear = -1;

// Function to add edge

void addEdge(int u, int v) {

    adj[u][v] = 1;

    adj[v][u] = 1;   // For undirected graph

}

// BFS traversal

void bfs(int start, int n) {

    int i;

    front = rear = 0;

    queue[rear] = start;

    visited[start] = 1;

    printf("BFS Traversal: ");

    while (front <= rear) {

        int node = queue[front++];

        printf("%d ", node);

        for (i = 0; i < n; i++) {

            if (adj[node][i] == 1 && visited[i] == 0) {

                queue[++rear] = i;

                visited[i] = 1;

            }

        }

    }

    printf("\n");

}

// DFS traversal

void dfs(int start, int n) {

    int i;

    printf("%d ", start);

    visited[start] = 1;

    for (i = 0; i < n; i++) {

        if (adj[start][i] == 1 && visited[i] == 0) {

            dfs(i, n);

        }

    }

}

int main() {

    int n, e, i, u, v, start;

    printf("Enter number of vertices: ");

    scanf("%d", &n);

    // Initialize adjacency matrix

    for (i = 0; i < n; i++) {

        for (int j = 0; j < n; j++) {

            adj[i][j] = 0;

        }

    }

    printf("Enter number of edges: ");

    scanf("%d", &e);

    printf("Enter edges (u v):\n");

    for (i = 0; i < e; i++) {

        scanf("%d%d", &u, &v);

        addEdge(u, v);

    }

    printf("Enter starting vertex: ");

    scanf("%d", &start);

    // BFS

    for (i = 0; i < n; i++) visited[i] = 0;

    bfs(start, n);

    // DFS

    for (i = 0; i < n; i++) visited[i] = 0;

    printf("DFS Traversal: ");

    dfs(start, n);

    printf("\n");

    return 0;

}


Comments

Popular posts from this blog

Stack using array

Bubble Sort

Singly linked list implementation