Connect Cities with Minimum cost
/**
* ConnedtCitiesWithMInimumCost
*/
import java.util.*;
public class ConnectCitiesWithMInimumCost {
public static class Pair implements Comparable<Pair> {
int dest;
int cost;
public Pair(int dest, int cost) {
this.dest = dest;
this.cost = cost;
}
@Override
public int compareTo(Pair p2) {
return this.cost - p2.cost;
}
}
public static int ConnectCities(int cities[][]) {
boolean vis[] = new boolean[cities.length];
PriorityQueue<Pair> pq = new PriorityQueue<>();
pq.add(new Pair(0, 0));
int finalcost = 0;
while (!pq.isEmpty()) {
Pair curr = pq.remove();
if (!vis[curr.dest]) {
vis[curr.dest] = true;
finalcost += curr.cost;
for (int i = 0; i < cities[curr.dest].length; i++) {
if (cities[curr.dest][i] != 0) {
pq.add(new Pair(i, cities[curr.dest][i]));
}
}
}
}
return finalcost;
}
public static void main(String[] args) {
int cities[][] = { { 0, 1, 2, 3, 4 },
{ 1, 0, 5, 0, 7 },
{ 2, 5, 0, 6, 0 },
{ 3, 0, 6, 0, 0 },
{ 4, 7, 0, 0, 0 } };
System.out.println("The minimum cost to connect cities: " + ConnectCities(cities));
}
}
Comments
Post a Comment