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
Represent a graph using Adjacency Matrix.
Perform BFS traversal using a queue.
Perform DFS traversal using recursion (stack concept).
Understand the difference between BFS and DFS in exploring nodes.
Algorithm
1. Graph Representation
Start
Initialize adj[n][n] to 0 (no edges).
For each edge (u, v), set adj[u][v] = 1 and adj[v][u] = 1 (for undirected graph).
End.
2. BFS Traversal
Start
Mark the starting vertex as visited and insert into queue.
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.
End.
3. DFS Traversal
Start
Mark the current vertex as visited and print it.
For each adjacent vertex v of current node:
If v is not visited, recursively call DFS on v.
End.
Flowchart
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
Post a Comment