{"id":11346,"date":"2025-12-23T16:05:33","date_gmt":"2025-12-23T10:35:33","guid":{"rendered":"https:\/\/namastedev.com\/blog\/?p=11346"},"modified":"2026-01-11T20:31:22","modified_gmt":"2026-01-11T15:01:22","slug":"prims-algorithm-code","status":"publish","type":"post","link":"https:\/\/namastedev.com\/blog\/prims-algorithm-code\/","title":{"rendered":"Prims Algorithm Code"},"content":{"rendered":"\n<!-- Shortest Path in unweighted graph -->\n<!-- PrismJS for Syntax Highlighting -->\n<link href=\"https:\/\/cdn.jsdelivr.net\/npm\/prismjs@1.29.0\/themes\/prism-tomorrow.min.css\" rel=\"stylesheet\">\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/prismjs@1.29.0\/prism.min.js\"><\/script>\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/prismjs@1.29.0\/plugins\/autoloader\/prism-autoloader.min.js\"><\/script>\n\n<style>\n.wp_blog_theme {\n  --primary: #E58C32;\n  --secondary: #030302;\n  --light-bg: #fef9f4;\n  --text-dark: #2d2d2d;\n  --tab-radius: 12px;\n  --shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n  --code-bg: #001f3f;\n  --code-text: #d4f1ff;\n}\n\n.wp_blog_container {\n  font-family: 'Segoe UI', sans-serif;\n  background: var(--light-bg);\n  margin: 0;\n  padding: 0;\n  color: var(--text-dark);\n}\n\n\/* Heading *\/\n.wp_blog_main-heading {\n  text-align: center;\n  font-size: 2.4rem;\n  color: var(--primary);\n  margin-top: 2.5rem;\n  font-weight: bold;\n}\n\n\/* Explanation Card *\/\n.wp_blog_explanation,\n.wp_blog_code-tabs-container {\n  max-width: 940px;\n  margin: 2rem auto;\n  padding: 2rem;\n  background: white;\n  border-radius: var(--tab-radius);\n  box-shadow: var(--shadow);\n}\n\n\/* Text and Visuals *\/\n.wp_blog_explanation h2 {\n  font-size: 1.4rem;\n  color: var(--primary);\n  margin-bottom: 0.5rem;\n}\n\n.wp_blog_explanation p,\n.wp_blog_explanation li {\n  font-size: 1.05rem;\n  line-height: 1.7;\n  margin: 0.5rem 0;\n}\n\n.wp_blog_explanation code {\n  background: #fef9f4;   \/* light bg instead of dark blue *\/\n  color: #E58C32;        \/* brand orange *\/\n  padding: 3px 6px;\n  border-radius: 4px;\n  font-family: 'Courier New', monospace;\n  font-weight: 600;      \/* optional, makes it pop *\/\n}\n\n.wp_blog_explanation img {\n  max-width: 100%;\n  border-radius: var(--tab-radius);\n  margin-top: 1rem;\n  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);\n}\n\n\/* Tab Buttons *\/\n.wp_blog_code-tabs-header {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n  margin-bottom: 1rem;\n}\n\n.wp_blog_code-tab-button {\n  padding: 0.6rem 1.2rem;\n  border: 1px solid var(--primary);\n  background: white;\n  color: var(--primary);\n  border-radius: 50px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.3s ease;\n}\n\n.wp_blog_code-tab-button:hover {\n  background: var(--secondary);\n}\n\n.wp_blog_code-tab-button.active {\n  background: var(--primary);\n  color: white;\n}\n\n\/* Code Content *\/\n.wp_blog_code-tab-content {\n  display: none;\n  background: var(--code-bg);\n  border-radius: var(--tab-radius);\n}\n\n.wp_blog_code-tab-content.active {\n  display: block;\n}\n\n.wp_blog_code-tab-content pre {\n  margin: 0;\n  padding: 1.5rem;\n  font-size: 1rem;\n  overflow-x: auto;\n  background: var(--code-bg);\n  border-radius: var(--tab-radius);\n  color: var(--code-text);\n}\n\n\/* Dark mode variables *\/\n.wp_blog_theme.dark-mode {\n  --light-bg: #121212;\n  --text-dark: #f5f5f5;\n  --shadow: 0 4px 12px rgba(255, 255, 255, 0.08);\n  --code-bg: #1e1e1e;\n  --code-text: #c5f0ff;\n}\n\n.wp_blog_theme.dark-mode .wp_blog_explanation {\n  background: #1e1e1e;\n}\n\n\/* Dark mode code highlight *\/\n.wp_blog_theme.dark-mode .wp_blog_explanation code {\n  background: #333;\n  color: #ffd27f;\n}\n\n.wp_blog_theme {\n  position: relative; \/* makes it the reference for absolute children *\/\n}\n\n.wp_blog_toggle-btn {\n  position: absolute;\n  top: 1rem;\n  right: 1rem;\n  z-index: 9999;\n  padding: 0.5rem 0.8rem;\n  border-radius: 10%;\n  background: var(--primary);\n  color: white;\n  font-weight: bold;\n  cursor: pointer;\n  border: none;\n  box-shadow: var(--shadow);\n  transition: background 0.3s, transform 0.2s;\n}\n\n.wp_blog_toggle-btn:hover {\n  background: #cc772e;\n}\n\n.wp_blog_theme.dark-mode .wp_blog_code-tabs-container {\n  background: #1e1e1e;\n}\n<\/style>\n\n<div class=\"wp_blog_container wp_blog_theme\">\n  <button id=\"blogNotesThemeToggle\" class=\"wp_blog_toggle-btn\">\ud83c\udf19<\/button>\n  <h1 class=\"wp_blog_main-heading\"><\/h1>\n\n  <div class=\"wp_blog_explanation\">\n    <h2>Prim&#8217;s Algorithm<\/h2>\n    <img decoding=\"async\" src=\"https:\/\/namastedev.com\/blog\/wp-content\/uploads\/2025\/12\/Screenshot-2025-12-23-at-1.04.10-PM.png\" alt=\"\">\n    <h3>Initial Priority Queue:<\/h3>\n    <img decoding=\"async\" src=\"https:\/\/namastedev.com\/blog\/wp-content\/uploads\/2025\/12\/Screenshot-2025-12-23-at-1.23.03-PM.png\" alt=\"\">\n\n    \n    <h2>Code<\/h2>\n\n  <div class=\"wp_blog_code-tabs-container\">\n      <div class=\"wp_blog_code-tabs-header\">\n      <button class=\"wp_blog_code-tab-button active\" data-lang=\"js\">JavaScript<\/button>\n      <button class=\"wp_blog_code-tab-button\" data-lang=\"py\">Python<\/button>\n      <button class=\"wp_blog_code-tab-button\" data-lang=\"java\">Java<\/button>\n      <button class=\"wp_blog_code-tab-button\" data-lang=\"cpp\">C++<\/button>\n      <button class=\"wp_blog_code-tab-button\" data-lang=\"c\">C<\/button>\n      <button class=\"wp_blog_code-tab-button\" data-lang=\"cs\">C#<\/button>\n    <\/div>\n<div class=\"wp_blog_code-tab-content active\" data-lang=\"js\">\n<pre>\nclass MinPriorityQueue {\n    constructor(config) {\n        this.priority = config.priority;\n        this.heap = [];\n    }\n\n    isEmpty() {\n        return this.heap.length === 0;\n    }\n\n    enqueue(element) {\n        this.heap.push(element);\n        this._bubbleUp();\n    }\n\n    dequeue() {\n        if (this.isEmpty()) return null;\n\n        const top = this.heap[0];\n        const last = this.heap.pop();\n\n        if (!this.isEmpty()) {\n            this.heap[0] = last;\n            this._bubbleDown();\n        }\n\n        return { element: top };\n    }\n\n    _bubbleUp() {\n        let i = this.heap.length - 1;\n\n        while (i > 0) {\n            let parent = Math.floor((i - 1) \/ 2);\n\n            if (this.priority(this.heap[i]) < this.priority(this.heap[parent])) {\n                [this.heap[i], this.heap[parent]] = [this.heap[parent], this.heap[i]];\n                i = parent;\n            } else {\n                break;\n            }\n        }\n    }\n\n    _bubbleDown() {\n        let i = 0;\n\n        while (true) {\n            let left = 2 * i + 1;\n            let right = 2 * i + 2;\n            let smallest = i;\n\n            if (left < this.heap.length &#038;&#038;\n                this.priority(this.heap[left]) < this.priority(this.heap[smallest])) {\n                smallest = left;\n            }\n\n            if (right < this.heap.length &#038;&#038;\n                this.priority(this.heap[right]) < this.priority(this.heap[smallest])) {\n                smallest = right;\n            }\n\n            if (smallest !== i) {\n                [this.heap[i], this.heap[smallest]] = [this.heap[smallest], this.heap[i]];\n                i = smallest;\n            } else {\n                break;\n            }\n        }\n    }\n}\n\nfunction primMST(n, graph) {\n    let visited = new Array(n).fill(false);\n    let pq = new MinPriorityQueue({ priority: (x) => x[0] });\n\n    pq.enqueue([0, 0]);\n\n    let edgesUsed = 0;\n    let mstCost = 0;\n\n    while (!pq.isEmpty() && edgesUsed < n) {\n        let [weight, node] = pq.dequeue().element;\n\n        if (visited[node]) continue;\n\n        visited[node] = true;\n        edgesUsed++;\n        mstCost += weight;\n\n        for (let [edge, edgeWt] of graph[node]) {\n            if (!visited[edge]) {\n                pq.enqueue([edgeWt, edge]);\n            }\n        }\n    }\n    return mstCost;\n}\n\nconst graph = [\n    [[1, 4], [2, 2], [3, 5]],\n    [[0, 4], [3, 1]],\n    [[0, 2], [3, 3]],\n    [[1, 1], [2, 3]]\n];\n\nconsole.log(primMST(4, graph));\n<\/pre>\n<\/div>\n\n    <div class=\"wp_blog_code-tab-content\" data-lang=\"py\">\n    <pre>\nimport heapq\n\ndef primMST(n, graph):\n    visited = [False] * n\n    pq = []\n\n    heapq.heappush(pq, (0, 0))  # (weight, node)\n\n    mst_cost = 0\n    edges_used = 0\n\n    while pq and edges_used < n:\n        weight, node = heapq.heappop(pq)\n\n        if visited[node]:\n            continue\n\n        visited[node] = True\n        mst_cost += weight\n        edges_used += 1\n\n        for edge, edge_wt in graph[node]:\n            if not visited[edge]:\n                heapq.heappush(pq, (edge_wt, edge))\n\n    return mst_cost\n\n\ngraph = [\n    [(1, 4), (2, 2), (3, 5)],\n    [(0, 4), (3, 1)],\n    [(0, 2), (3, 3)],\n    [(1, 1), (2, 3)]\n]\n\nprint(primMST(4, graph))\n\n    <\/pre>\n    <\/div>\n\n    <div class=\"wp_blog_code-tab-content\" data-lang=\"java\">\n    <pre>\nimport java.util.*;\n\nclass Pair {\n    int weight, node;\n\n    Pair(int w, int n) {\n        weight = w;\n        node = n;\n    }\n}\n\npublic class PrimMST {\n\n    public static int primMST(int n, List<List<Pair>> graph) {\n        boolean[] visited = new boolean[n];\n\n        PriorityQueue<Pair> pq = new PriorityQueue<>(\n                (a, b) -> a.weight - b.weight\n        );\n\n        pq.add(new Pair(0, 0));\n        int mstCost = 0, edgesUsed = 0;\n\n        while (!pq.isEmpty() && edgesUsed < n) {\n            Pair curr = pq.poll();\n\n            if (visited[curr.node]) continue;\n\n            visited[curr.node] = true;\n            mstCost += curr.weight;\n            edgesUsed++;\n\n            for (Pair p : graph.get(curr.node)) {\n                if (!visited[p.node]) {\n                    pq.add(new Pair(p.weight, p.node));\n                }\n            }\n        }\n        return mstCost;\n    }\n\n    public static void main(String[] args) {\n        List<List<Pair>> graph = new ArrayList<>();\n\n        for (int i = 0; i < 4; i++) graph.add(new ArrayList<>());\n\n        graph.get(0).add(new Pair(4, 1));\n        graph.get(0).add(new Pair(2, 2));\n        graph.get(0).add(new Pair(5, 3));\n\n        graph.get(1).add(new Pair(4, 0));\n        graph.get(1).add(new Pair(1, 3));\n\n        graph.get(2).add(new Pair(2, 0));\n        graph.get(2).add(new Pair(3, 3));\n\n        graph.get(3).add(new Pair(1, 1));\n        graph.get(3).add(new Pair(3, 2));\n\n        System.out.println(primMST(4, graph));\n    }\n}\n    <\/pre>\n    <\/div>\n\n<div class=\"wp_blog_code-tab-content\" data-lang=\"cpp\">\n  <pre>\n#include &lt;bits\/stdc++.h&gt;\nusing namespace std;\n\nint primMST(int n, vector<vector<pair<int,int>>> &graph) {\n    vector<bool> visited(n, false);\n    priority_queue<pair<int,int>, vector<pair<int,int>>, greater<>> pq;\n\n    pq.push({0, 0});\n    int mstCost = 0;\n\n    while (!pq.empty()) {\n        auto [weight, node] = pq.top();\n        pq.pop();\n\n        if (visited[node]) continue;\n\n        visited[node] = true;\n        mstCost += weight;\n\n        for (auto &[edge, edgeWt] : graph[node]) {\n            if (!visited[edge]) {\n                pq.push({edgeWt, edge});\n            }\n        }\n    }\n    return mstCost;\n}\n\nint main() {\n    vector<vector<pair<int,int>>> graph = {\n        {{1,4},{2,2},{3,5}},\n        {{0,4},{3,1}},\n        {{0,2},{3,3}},\n        {{1,1},{2,3}}\n    };\n\n    cout << primMST(4, graph);\n}\n  <\/pre>\n    <\/div>\n    <div class=\"wp_blog_code-tab-content\" data-lang=\"c\">\n      <pre>\n#include &lt;stdio.h&gt;\n#include &lt;limits.h&gt;\n\n#define V 4\n\nint minKey(int key[], int mstSet[]) {\n    int min = INT_MAX, minIndex;\n\n    for (int v = 0; v < V; v++) {\n        if (!mstSet[v] &#038;&#038; key[v] < min) {\n            min = key[v];\n            minIndex = v;\n        }\n    }\n    return minIndex;\n}\n\nint primMST(int graph[V][V]) {\n    int parent[V];\n    int key[V];\n    int mstSet[V];\n\n    for (int i = 0; i < V; i++) {\n        key[i] = INT_MAX;\n        mstSet[i] = 0;\n    }\n\n    key[0] = 0;\n    parent[0] = -1;\n\n    for (int count = 0; count < V - 1; count++) {\n        int u = minKey(key, mstSet);\n        mstSet[u] = 1;\n\n        for (int v = 0; v < V; v++) {\n            if (graph[u][v] &#038;&#038; !mstSet[v] &#038;&#038; graph[u][v] < key[v]) {\n                parent[v] = u;\n                key[v] = graph[u][v];\n            }\n        }\n    }\n\n    int cost = 0;\n    for (int i = 1; i < V; i++)\n        cost += graph[i][parent[i]];\n\n    return cost;\n}\n\nint main() {\n    int graph[V][V] = {\n        {0, 4, 2, 5},\n        {4, 0, 0, 1},\n        {2, 0, 0, 3},\n        {5, 1, 3, 0}\n    };\n\n    printf(\"%d\\n\", primMST(graph));\n    return 0;\n}\n\n<\/pre>\n    <\/div>\n\n    <div class=\"wp_blog_code-tab-content\" data-lang=\"cs\">\n    <pre>\nusing System;\nusing System.Collections.Generic;\n\nclass PrimMST\n{\n    public static int Prim(int n, List<List<(int, int)>> graph)\n    {\n        bool[] visited = new bool[n];\n        var pq = new PriorityQueue<(int weight, int node), int>();\n\n        pq.Enqueue((0, 0), 0);\n        int mstCost = 0;\n\n        while (pq.Count > 0)\n        {\n            var (weight, node) = pq.Dequeue();\n\n            if (visited[node]) continue;\n\n            visited[node] = true;\n            mstCost += weight;\n\n            foreach (var (edge, edgeWt) in graph[node])\n            {\n                if (!visited[edge])\n                {\n                    pq.Enqueue((edgeWt, edge), edgeWt);\n                }\n            }\n        }\n        return mstCost;\n    }\n\n    static void Main()\n    {\n        var graph = new List<List<(int, int)>> {\n            new() { (1,4), (2,2), (3,5) },\n            new() { (0,4), (3,1) },\n            new() { (0,2), (3,3) },\n            new() { (1,1), (2,3) }\n        };\n\n        Console.WriteLine(Prim(4, graph));\n    }\n}\n<\/pre>\n    <\/div>\n  <\/div>\n\n    <h2>Time Complexity<\/h2>\n    <p><strong><code>\n        O((V + E) log V)\n    <\/code><\/strong>\n<\/p>\n    <h2>Space Complexity<\/h2>\n    <p>\n        <strong><code> O(V + E)<\/code><\/strong>\n    <\/p>\n<\/div>  \n<\/div>\n<script>\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  const buttons = document.querySelectorAll(\".wp_blog_code-tab-button\");\n  const contents = document.querySelectorAll(\".wp_blog_code-tab-content\");\n\n  buttons.forEach((button) => {\n    button.addEventListener(\"click\", () => {\n      const lang = button.getAttribute(\"data-lang\");\n\n      buttons.forEach((btn) => btn.classList.remove(\"active\"));\n      contents.forEach((content) => content.classList.remove(\"active\"));\n\n      button.classList.add(\"active\");\n      document\n        .querySelector(`.wp_blog_code-tab-content[data-lang=\"${lang}\"]`)\n        .classList.add(\"active\");\n    });\n  });\n\n  const themeToggle = document.getElementById(\"blogNotesThemeToggle\");\n  const themeContainer = document.querySelector(\".wp_blog_theme\");\n\n  themeToggle.addEventListener(\"click\", () => {\n    themeContainer.classList.toggle(\"dark-mode\");\n    themeToggle.textContent =\n      themeContainer.classList.contains(\"dark-mode\") ? \"\u2600\ufe0f\" : \"\ud83c\udf19\";\n  });\n});\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>\ud83c\udf19 Prim&#8217;s Algorithm Initial Priority Queue: Code JavaScript Python Java C++ C C# class MinPriorityQueue { constructor(config) { this.priority = config.priority; this.heap = []; } isEmpty() { return this.heap.length === 0; } enqueue(element) { this.heap.push(element); this._bubbleUp(); } dequeue() { if (this.isEmpty()) return null; const top = this.heap[0]; const last = this.heap.pop(); if (!this.isEmpty()) { this.heap[0]<\/p>\n","protected":false},"author":108,"featured_media":0,"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,"footnotes":""},"categories":[210,322,260,176,175,211,811,810,174,172,173],"tags":[],"class_list":{"0":"post-11346","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-algorithms","7":"category-algorithms-and-data-structures","8":"category-c-c-plus-plus","9":"category-csharp","10":"category-cplusplus","11":"category-data-structures","12":"category-data-structures-and-algorithms","13":"category-dsa","14":"category-java","15":"category-javascript","16":"category-python"},"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/posts\/11346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/users\/108"}],"replies":[{"embeddable":true,"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/comments?post=11346"}],"version-history":[{"count":6,"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/posts\/11346\/revisions"}],"predecessor-version":[{"id":11448,"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/posts\/11346\/revisions\/11448"}],"wp:attachment":[{"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/media?parent=11346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/categories?post=11346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/namastedev.com\/blog\/wp-json\/wp\/v2\/tags?post=11346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}