1
+ //Will work only for graphs with no self loops
2
+
3
+ #include <stdio.h>
4
+
5
+ void bfs (int n , int a [20 ][20 ], int source , int visited [20 ], int e [20 ][2 ])
6
+ {
7
+ int f = 0 , r = -1 , q [20 ];
8
+ int u , v , k = 1 ;
9
+ visited [source ] = 1 ;
10
+ r += 1 ;
11
+ q [r ] = source ;
12
+ while (f <=r )
13
+ {
14
+ u = q [f ];
15
+ f = f + 1 ;
16
+ for (v = 1 ; v <=n ; v ++ )
17
+ {
18
+ if (a [u ][v ]== 1 && visited [v ]== 0 )
19
+ {
20
+ visited [v ] = 1 ;
21
+ r += 1 ;
22
+ q [r ] = v ;
23
+ e [k ][1 ] = u ;
24
+ e [k ][2 ] = v ;
25
+ k = k + 1 ;
26
+ }
27
+ }
28
+ }
29
+
30
+ }
31
+
32
+ void dfs (int n , int a [20 ][20 ], int u , int visited [20 ], int e [20 ][2 ])
33
+ {
34
+ int v ;
35
+ static int k = 1 ;
36
+ visited [u ] = 1 ;
37
+ for (v = 1 ; v <=n ; v ++ )
38
+ {
39
+ if (a [u ][v ] == 1 && visited [v ] == 0 )
40
+ {
41
+ e [k ][1 ] = u ;
42
+ e [k ][2 ] = v ;
43
+ k = k + 1 ;
44
+ dfs (n ,a ,v ,visited ,e );
45
+ }
46
+ }
47
+ }
48
+
49
+ int main ()
50
+ {
51
+ int i , j , n , visited [20 ], a [20 ][20 ], source , flag = 0 , choice , e [20 ][2 ];
52
+ printf ("Enter the number of vertices: " );
53
+ scanf ("%d" , & n );
54
+ printf ("Enter the adjacency matrix: \n" );
55
+ for (i = 1 ; i <=n ; i ++ )
56
+ {
57
+ for (j = 1 ; j <=n ; j ++ )
58
+ {
59
+ scanf ("%d" , & a [i ][j ]);
60
+ }
61
+ }
62
+ printf ("Enter the source node: " );
63
+ scanf ("%d" , & source );
64
+ for (i = 1 ; i <=n ; i ++ )
65
+ {
66
+ visited [i ] = 0 ;
67
+ }
68
+
69
+ printf ("Enter 1.BFS 2.DFS: " );
70
+ scanf ("%d" , & choice );
71
+ if (choice == 1 )
72
+ bfs (n , a , source , visited , e );
73
+ else
74
+ dfs (n , a , source , visited ,e );
75
+
76
+ for (i = 1 ; i <=n ; i ++ )
77
+ {
78
+ if (visited [i ] == 0 )
79
+ {
80
+ flag = 1 ;
81
+ printf ("%d is not reachable.\n" ,i );
82
+ }
83
+ else
84
+ printf ("%d is reachable.\n" , i );
85
+ }
86
+ if (flag == 1 )
87
+ {
88
+ printf ("Graph is not connected.\n" );
89
+ }
90
+ else
91
+ {
92
+ printf ("It is a connected graph.\n" );
93
+ printf ("The Spanning tree is: \n" );
94
+ for (i = 1 ; i <=n - 1 ; i ++ )
95
+ printf ("%d to %d\n" ,e [i ][1 ],e [i ][2 ]);
96
+ }
97
+ return 0 ;
98
+ }
0 commit comments