//结点数量privateint[] vertexs;//矩阵实现图privateint[][] edges;//n:为指定开始的结点publicvoidprim(Graph graph ,int n){//这里我们需要一个辅助数组来标识结点是否已经访问boolean[] rank =newboolean[];//第一次我们需要把结点设置为已经访问
rank[n]=true;//用来标记最短边的两个结点int a =-1;int b =-1;//获取已经访问结点,和未访问结点之间最小一条边的权值,这里需要设置大点,防止最短的没有获取到int min =10000;//第一层表示每次获取一条两个集合之间最短的一条边,n个结点有n-1条边for(int i =0; i < vertexs.length; i++){//广度遍历结点,获取最小的边for(int j =0; i < vertexs.length; j++){for(int k =0; k < vertexs.length; k++){//最关键的在这个判断,我们需要寻找两个集合之间最短的一条边,那么我们再广度遍历时候,//只要一个点访问过,一个没访问,这里不需要判断是否成环,因为成环是需要两个都访问过才能成if(rank[j]&&!rank[k]&& edges[j][k]< min){
min = edges[j][k];
a = j;
b = k;}}}//最小边已经找到了,我们可以把这个结点设置成已经访问了
rank[b]=true;//需要更新min的值,防止错过最小值
min =10000;}}