#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int v;
void dfsrec(int m[][v], int s, bool visited[])
{
int j;
visited[s] = true;
printf(“%d “, s + 1);
for (j = 0; j < v; j++)
{
if (m[s][j] == 1 && !visited[j])
dfsrec(m, j, visited);
}
}
int main()
{
int i, j, s;
printf(“Enter the number of vertices:”);
scanf(“%d”, &v);
int m[v][v];
printf(“Enter the adjacency matrix:\n”);
for (i = 0; i < v; i++)
{
for (j = 0; j < v; j++)
{
scanf(“%d”, &m[i][j]);
}
}
printf(“Enter the source vertex to start:”);
scanf(“%d”, &s);
bool visited[v];
for (i = 0; i < v; i++)
{
visited[i] = false;
}
printf(“\nDepth first search of given graph is:\n”);
dfsrec(m, s – 1, visited);
// Check for unreachable vertices
for (i = 0; i < v; i++)
{
if (!visited[i])
{
printf(“\nVertex %d is not reachable\n”, i + 1);
}
}
return 0;
}