network.java
来自「PKU中一些数据结构基本算法题的java实现」· Java 代码 · 共 91 行
JAVA
91 行
package PKU.PRIM;
import java.util.*;
/**
* ID:1861
* PRIM
* @author yhm
*
*/
public class Network {
/**
* @param args
*/
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while (cin.hasNext()) {
int size = cin.nextInt();
int num = cin.nextInt();
int[][] dis = new int[size][size];
for(int i=0;i<size;i++){
Arrays.fill(dis[i], Integer.MAX_VALUE);
}
for (int i = 0; i < num; i++) {
int x = cin.nextInt()-1;
int y = cin.nextInt()-1;
dis[x][y] = cin.nextInt();
dis[y][x] = dis[x][y];
}
prim(dis,size);
}
}
static void prim(int[][] dis, int size){
int[] low = new int[size];
boolean[] inS = new boolean[size];
int[][] edge = new int[size][2];
List<Integer> xlist = new ArrayList<Integer>();
List<Integer> ylist = new ArrayList<Integer>();
int maxLen = Integer.MIN_VALUE;
for(int i=0;i<size;i++){
low[i] = dis[0][i];
edge[i][0] = 0;
edge[i][1] = i;
inS[i] = false;
}
low[0] = 0;
inS[0] = true;
for(int i=1;i<size;i++){
int min = Integer.MAX_VALUE;
int minIndex=0;
for(int j=1;j<size;j++){
if(!inS[j] && low[j]<min){
minIndex = j;
min = low[j];
}
}
maxLen = Math.max(maxLen, min);
low[minIndex]=0;
inS[minIndex]=true;
xlist.add(edge[minIndex][0]);
ylist.add(edge[minIndex][1]);
for(int j=1;j<size;j++){
if(!inS[j] && dis[minIndex][j]<low[j] && dis[minIndex][j] != Integer.MAX_VALUE){
low[j] = dis[minIndex][j];
edge[j][0] = minIndex;
edge[j][1] = j;
}
}
}
System.out.println(maxLen);
Integer[] xR = xlist.toArray(new Integer[0]);
Integer[] yR = ylist.toArray(new Integer[0]);
int edgeNum = xR.length;
System.out.println(edgeNum);
for(int i=0;i<edgeNum;i++){
System.out.print((xR[i]+1)+" ");
System.out.println(yR[i]+1);
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?