Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Cover image for Minimum Spanning Trees Breaking the Norm
Priya Pandey
Priya Pandey

Posted on

     

Minimum Spanning Trees Breaking the Norm

It is common for engineers to follow the trend, often overlooking the potential of re-creating solutions. I have a unique approach to a Minimum Spanning Tree (MST) problem using principles inspired by Dijkstra’s algorithm. By stepping away from conventional practices and exploring creative adaptations, we can unlock new pathways for innovation.

The core idea behind my approach is reminiscent of Dijkstra's algorithm. I maintain a check on all nodes in the graph to ensure that we select the edge that provides the minimum weight for each specific node. This strategy allows us to build the Minimum Spanning Tree (MST) incrementally by always considering the lightest edge connected to any node.

Here’s how it works:

1. Node Connection: At each step, I focus on adding a single edge that connects a new node to the growing MST. By selecting the edge with the minimum weight for that node, we effectively ensure that each addition contributes to minimizing the overall tree weight.
2. Edge Count: This process continues until we have added n−1 edges, where n is the total number of nodes in the graph. Since each node must connect to at least one other node(considering it doesn't have an unconnected component) to be included in the tree, we can be confident that all nodes will eventually be connected. As we select the lightest edge for each node, there will never be a scenario where a node is left unconnected; every node reaches another through some edge and we take the minimum one.
3. Limitations: It’s important to note that this approach does not handle negative cycles. Since we rely on the assumption of non-negative edge weights, any negative cycle could disrupt the tree structure and lead to incorrect results.

 int spanningTree(int V, vector<vector<int>> adj[])    {        vector<int> weight(V,INT_MAX);        vector<vector<int>> mat(V,vector<int>(V,-1));        for(int i=0;i<V;i++){            for(auto it: adj[i]){                mat[i][it[0]]=it[1];            }        }        priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;        q.push({0,0});        weight[0]=0;        int ans=0;        while(!q.empty()){            int node=q.top().second;            int dis=q.top().first;            q.pop();            for(int i=0;i<V;i++){                int wei=mat[node][i];                if(weight[i]>wei && wei!=-1){                    q.push({wei,i});                    if(weight[i]!=INT_MAX){                        ans-=weight[i];                    }                    weight[i]=wei;                    ans+=wei;                    //this statement ensures that we don't add the bidirectional edge                    mat[i][node]=-1;                }            }        }        return ans;    }
Enter fullscreen modeExit fullscreen mode

I welcome any thoughts on its correctness and potential edge cases that might challenge its validity. Let's discuss how we can further refine this solution and explore scenarios where it may or may not hold up. Your insights and critiques are invaluable in this journey of exploration!

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

I am passionate about development, cryptography, and security, and how they can be applied to solve real-world problems. I aim to learn from the best and become a proficient and innovative engineer.
  • Joined

More fromPriya Pandey

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp