Header-C
Header-C

 

 

Program Structure

The program consists of several key components:

  • Graph Representation: The graph is represented using an adjacency list. This is efficient for sparse graphs.
  • DFS Function: A recursive function that visits nodes and explores as far as possible along each branch before backtracking.
  • Main Function: Initializes the graph and starts the DFS traversal from a specified node.

Code


#include 
#include 

#define MAX_VERTICES 100

// Structure to represent a graph
typedef struct {
    int vertices;
    int adj[MAX_VERTICES][MAX_VERTICES];
} Graph;

// Function to create a graph
Graph* createGraph(int vertices) {
    Graph* graph = (Graph*)malloc(sizeof(Graph));
    graph->vertices = vertices;

    // Initialize adjacency matrix
    for (int i = 0; i < vertices; i++) {
        for (int j = 0; j < vertices; j++) { graph->adj[i][j] = 0;
        }
    }
    return graph;
}

// Function to add an edge to the graph
void addEdge(Graph* graph, int src, int dest) {
    graph->adj[src][dest] = 1; // Directed edge from src to dest
    graph->adj[dest][src] = 1; // Undirected edge for bidirectional connection
}

// DFS utility function
void DFSUtil(Graph* graph, int vertex, int visited[]) {
    // Mark the current vertex as visited
    visited[vertex] = 1;
    printf("%d ", vertex);

    // Recur for all the vertices adjacent to this vertex
    for (int i = 0; i < graph->vertices; i++) {
        if (graph->adj[vertex][i] && !visited[i]) {
            DFSUtil(graph, i, visited);
        }
    }
}

// Function to perform DFS traversal
void DFS(Graph* graph, int startVertex) {
    int visited[MAX_VERTICES] = {0}; // Mark all vertices as not visited
    DFSUtil(graph, startVertex, visited);
}

int main() {
    int vertices = 5;
    Graph* graph = createGraph(vertices);

    // Add edges to the graph
    addEdge(graph, 0, 1);
    addEdge(graph, 0, 2);
    addEdge(graph, 1, 3);
    addEdge(graph, 1, 4);
    addEdge(graph, 2, 4);

    printf("DFS Traversal starting from vertex 0:\n");
    DFS(graph, 0);

    // Free allocated memory
    free(graph);
    return 0;
}

Explanation of the Code

1. Graph Structure: The graph is defined using a structure that includes the number of vertices and an adjacency matrix to store edges.

2. createGraph: This function initializes the graph with a specified number of vertices and sets the adjacency matrix to zero.

3. addEdge: This function adds edges to the graph by updating the adjacency matrix. It allows for both directed and undirected edges.

4. DFSUtil: This is a recursive function that performs the actual DFS traversal. It marks the current vertex as visited, prints it, and recursively visits all adjacent unvisited vertices.

5. DFS: This function initializes the visited array and starts the recursive traversal from a specified vertex.

6. main: This function creates a graph, adds edges, and initiates the DFS traversal starting from vertex 0.

Conclusion

The program demonstrates a simple implementation of Depth First Search using an adjacency matrix for graph representation. This approach is suitable for educational purposes and can be adapted for more complex scenarios.

 

By Aditya Bhuyan

I work as a cloud specialist. In addition to being an architect and SRE specialist, I work as a cloud engineer and developer. I have assisted my clients in converting their antiquated programmes into contemporary microservices that operate on various cloud computing platforms such as AWS, GCP, Azure, or VMware Tanzu, as well as orchestration systems such as Docker Swarm or Kubernetes. For over twenty years, I have been employed in the IT sector as a Java developer, J2EE architect, scrum master, and instructor. I write about Cloud Native and Cloud often. Bangalore, India is where my family and I call home. I maintain my physical and mental fitness by doing a lot of yoga and meditation.

Leave a Reply

Your email address will not be published. Required fields are marked *

error

Enjoy this blog? Please spread the word :)