您的位置:首页 > 其它

poj 1258 最小生成树(普里姆算法)

2012-06-14 19:46 183 查看
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

;
visited = new boolean
;
result = new int
;
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];
}

}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: