public class Prim {
static final int M = 10000;
static int extractMin(int[] key, boolean[] visited) {
int min = M;
int idx = -1;
for(int i = 0; i < key.length; i++) {
if(!visited[i] && key[i] < min) {
idx = i;
min = key[i];
}
}
visited[idx] = true;
return idx;
}
static int prim(int vertex, int[][] edges) {
int[] key = new int[vertex];
boolean[] visited = new boolean [vertex];
int[] p = new int [vertex];
//init
for(int i = 0; i < vertex; i++) {
key[i] = M;
p[i] = -1;
}
int r = 0;
key[r] = 0;
p[r] = -1;
int cnt = vertex;
while(cnt > 0) {
cnt--;
//EXTRACT-MIN
int u = extractMin(key, visited);
for(int v = 0; v < edges[u].length; v++) { //Adj[u]
if(!visited[v] && edges[u][v] < key[v]) {
p[v] = u;
key[v] = edges[u][v];
最小生成树 : Prim 算法
最新推荐文章于 2020-12-07 23:57:17 发布