Prim最小產生樹演算法詳解以及java實現原始碼__演算法

來源:互聯網
上載者:User
1.Prim演算法核心思想 prim演算法也是貪婪演算法的一個典型例子,有點類似於dijkstra演算法。核心思想:將點分為兩撥,已經加入最小產生樹的,未加入的,找到未加入中距離集合最近的點,添加該點,修改其它點到集合的距離,直到所有結點都加入到最小產生樹。
2.java原始碼
import java.util.*;public class Prim {static int MAX = Integer.MAX_VALUE;public static void main(String[] args) {int[][] map = new int[][] {{ 0, 10, MAX, MAX, MAX, 11, MAX, MAX, MAX },{ 10, 0, 18, MAX, MAX, MAX, 16, MAX, 12 },{ MAX, MAX, 0, 22, MAX, MAX, MAX, MAX, 8 },{ MAX, MAX, 22, 0, 20, MAX, MAX, 16, 21 },{ MAX, MAX, MAX, 20, 0, 26, MAX, 7, MAX },{ 11, MAX, MAX, MAX, 26, 0, 17, MAX, MAX },{ MAX, 16, MAX, MAX, MAX, 17, 0, 19, MAX },{ MAX, MAX, MAX, 16, 7, MAX, 19, 0, MAX },{ MAX, 12, 8, 21, MAX, MAX, MAX, MAX, 0 } };prim(map, map.length);} public static void prim(int[][] graph, int n){                char[] c = new char[]{'A','B','C','D','E','F','G','E','F'};                int[] lowcost = new int[n];  //到新集合的最小權         int[] mid= new int[n];//存取前驅結點            List<Character> list=new ArrayList<Character>();//用來儲存加入結點的順序        int i, j, min, minid , sum = 0;        //初始化輔助數組        for(i=1;i<n;i++)        {        lowcost[i]=graph[0][i];        mid[i]=0;        }        list.add(c[0]);            //一共需要加入n-1個點        for(i=1;i<n;i++)        {         min=MAX;         minid=0;         //每次找到距離集合最近的點         for(j=1;j<n;j++)         {         if(lowcost[j]!=0&&lowcost[j]<min)         {         min=lowcost[j];         minid=j;         }         }                  if(minid==0) return;         list.add(c[minid]);         lowcost[minid]=0;         sum+=min;         System.out.println(c[mid[minid]] + "到" + c[minid] + " 權值:" + min);         //加入該點後,更新其它點到集合的距離         for(j=1;j<n;j++)         {         if(lowcost[j]!=0&&lowcost[j]>graph[minid][j])         {         lowcost[j]=graph[minid][j];         mid[j]=minid;         }         }        }        System.out.println("sum:" + sum);            }    }


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.