(Java資料結構和演算法)最小生成樹---prime演算法
阿新 • • 發佈:2018-12-01
public class Main {
public static void main(String[] args){
int inf = 1000000;//無窮大
//圖,可以這樣認為:圖的任意兩個頂點之間都有邊,兩頂點無法到達的,可以認為他們之間的邊權是無窮大
int[][] graph = {
{inf, 6, 1, inf},
{6, inf, 5, 3},
{1, 5, inf, 4},
{inf, 3, 4, inf}
};
boolean[] visited = new boolean[4];;
for(int i = 0; i < 4; i++){
visited[i] = false;
}
int index = 0;
int sum = 0;
int[] distance = new int[4];
visited[0] = true;//從1這個頂點開始
for(int i = 0; i < 4; i++){
distance[i] = graph[0][i];
}
//由於已經訪問過一個節點了,剩下3個節點,每次能找好一個節點,最多再找3次
for(int i = 0; i < 3; i++){
int minimum = inf;
//從所有沒有訪問的節點中找一個到已經訪問的節點距離最小的
for(int j = 0; j < 4; j++){
if(visited[j] == false && distance[j] < minimum){
minimum = distance[j];
index = j;
}
}
visited[index] = true;
sum += minimum;
//更新距離,上面又新產生了一個訪問過的節點,現在更新所有未訪問節點
//到所有已經訪問節點的最小距離
for(int j = 0; j < 4; j++){
if(visited[ j] == false && distance[j] > graph[index][j]){
distance[j] = graph[index][j];
}
}
}
System.out.println(sum);
}
}