1. 程式人生 > >(Java資料結構和演算法)最小生成樹---prime演算法

(Java資料結構和演算法)最小生成樹---prime演算法

參考博文


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); } }