dfs.c
100 linesc
DOWNLOAD
1// Aim: Program to perform Depth First Search (DFS) on a graph.
2#include <stdio.h>
3#include <stdlib.h>
4
5#define MAX 20
6int s[MAX], t = -1, nv, am[MAX][MAX], visited[MAX];
7void push(int item) {
8    if (t==MAX)
9    {
10        printf("stack overflow\n");
11        return;
12    }
13    
14    else 
15    {
16        t++;  
17    }
18    s[t] = item;
19}
20
21int pop() {
22    if (t== -1)
23    {
24        printf("stack is empty\n");
25        return -1;  
26    }
27    int item = s[t];
28    t--;
29    return item;
30}
31
32void bfs(int sv){
33    visited[sv] = 1;
34    push(sv);
35
36    printf("DFS Traversal: ");
37
38    while (t != -1) 
39    {
40        int cv = pop();
41        printf("v%d ", cv);
42
43        for (int i = 0; i < nv; i++)
44        {
45            if (am[cv][i] == 1 && visited[i] == 0)
46            {
47                visited[i] = 1;
48               push(i);
49            }
50        }
51    }
52    printf("\n");
53}
54
55int main(){
56    int e, sv;
57
58    printf("Enter the number of vertices: ");
59    scanf("%d", &nv);
60    for (int i = 0; i < nv; i++)
61    {
62        visited[i] = 0;
63        for (int j = 0; j < nv; j++)
64        {
65            am[i][j] = 0;
66        }
67    }
68
69    for (int i = 0; i < nv; i++) 
70    {
71        for (int j = 0; j < nv; j++)
72        {
73            if (i != j) { 
74                printf("Do you want to create an edge between v%d and v%d? (enter 1 for yes, 0 for no): ", i, j);
75                scanf("%d", &e);
76                if (e == 1) 
77                {
78                    am[i][j] = 1;  
79                }
80            }
81        }
82    }
83
84    printf("Adjacency matrix:\n");
85    for (int i = 0; i < nv; i++) 
86    {
87        for (int j = 0; j < nv; j++) 
88        {
89            printf("%d ", am[i][j]);
90        }
91        printf("\n");
92    }
93
94    printf("Enter the starting vertex (0 to %d): ", nv - 1);
95    scanf("%d", &sv);
96
97    bfs(sv);
98
99    return 0;
100}