Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- int minCostConnectPoints(vector<vector<int>>& points) {
- int n = points.size();
- vector<vector<pair<int, int>>> adjList(n);
- // Make the graph
- for(int i = 0;i<n;i++){
- for(int j = i+1;j<n;j++){
- int distance = abs(points[i][0]-points[j][0]) + abs(points[i][1]-points[j][1]);
- adjList[i].push_back({j, distance});
- adjList[j].push_back({i, distance});
- }
- }
- // Implement Prim's Algo
- // Priority Queue of (weight, (node, parent))
- priority_queue<pair<int, pair<int, int>>, vector <pair<int, pair<int, int>>>, greater<pair<int, pair<int, int>>>> minHeap;
- // Let's start with 0th vertex - Start with a random node in Graph
- minHeap.push(make_pair(0, make_pair(0, -1)));
- vector<bool> visited(n, false);
- int ans = 0, edges_added = 0;
- while(edges_added < n){
- pair<int, pair<int, int>> curr = minHeap.top();
- minHeap.pop();
- int weight = curr.first;
- int node = curr.second.first;
- int parent = curr.second.second;
- if(visited[node]) continue;
- visited[node] = true;
- for(auto u:adjList[node]){
- if(!visited[u.first]){
- minHeap.push(make_pair(u.second, make_pair(u.first, node)));
- }
- }
- ans += weight;
- edges_added++;
- }
- return ans;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment