1584. Min Cost to Connect All Points
Medium
You are given an array points
representing integer coordinates of some points on a 2D-plane, where points[i] = [xi, yi]
.
The cost of connecting two points [xi, yi]
and [xj, yj]
is the manhattan distance between them: |xi - xj| + |yi - yj|
, where |val|
denotes the absolute value of val
.
Return the minimum cost to make all points connected. All points are connected if there is exactly one simple path between any two points.
Example 1:
Input: points = [[0,0],[2,2],[3,10],[5,2],[7,0]]
Output: 20
Explanation:
We can connect the points as shown above to get the minimum cost of 20.
Notice that there is a unique path between every pair of points.
Example 2:
Input: points = [[3,12],[-2,5],[-4,1]]
Output: 18
Constraints:
1 <= points.length <= 1000
-106 <= xi, yi <= 106
All pairs
(xi, yi)
are distinct.
Time Complexity : O(N^2)
class Solution:
def minCostConnectPoints(self, points: List[List[int]]) -> int:
# Minimum Spanning Tree Prims Algo
n = len(points)
total_cost = 0
edges_count = 0
visited = [False]*n
min_dist = [math.inf]*n
min_dist[0] = 0 # Start Point
while edges_count < n:
current_min_edge = math.inf
current_node = -1
# Find node with minimum distance
for node in range(n):
if not visited[node] and min_dist[node] < current_min_edge:
current_node = node
current_min_edge = min_dist[node]
total_cost += current_min_edge
edges_count += 1
visited[current_node] = True
for next_node in range(n):
weight = abs(points[current_node][0] - points[next_node][0]) + abs(points[current_node][1] - points[next_node][1])
if not visited[next_node] and min_dist[next_node] > weight:
min_dist[next_node] = weight
return total_cost
Last updated