import java.util.Scanner;
public class Test1258 {
static int n = 0;
static int[][] array = null;
static int[] result = null;
static boolean[] visited = null;
static boolean b = true;
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
n = scan.nextInt();
array = new int[n][n];
visited = new boolean[n];
result = new int[n];
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
array[i][j] = scan.nextInt();
if (b) {
result[j] = array[i][j];
}
}
b = false;
}
while (n > 0) {
visited[0] = true;
min(min(result));
n--;
}
int sum = 0;
for(int i=0;i<result.length; i++) {
sum += result[i];
}
System.out.println(sum);
}
public static int min(int[] result) {
int min = 0;
int lie = 0;
for (int i = 0; i < result.length; i++) {
if (result[i] != 0 && visited[i] == false) {
min = result[i];
lie = i;
break;
}
}
for (int i = 0; i < result.length; i++) {
if (result[i] != 0 && visited[i] == false) {
if (min > result[i]) {
min = result[i];
lie = i;
}
}
}
if (lie != 0) {
visited[lie] = true;
}
return lie;
}
public static void min(int count) {
int row = count;
for (int i = 1; i < result.length; i++) {
if (visited[i] == false && array[row][i] != 0) {
if (result[i] == 0) {
result[i] = array[row][i];
} else if (result[i] > array[row][i]) {
result[i] = array[row][i];
}
}
}
}
}
poj 1258 最小生成树(普里姆算法)
最新推荐文章于 2022-02-25 15:43:19 发布