您的位置:首页 > 编程语言 > Java开发

java中最小生成树的实现

2016-03-25 12:43 441 查看
最小生成树的实现:
import java.util.ArrayList;
import java.util.List;

public class ShortestTree {

int[][]  dataMap={
{-1,-1,10,-1,30,100},
{-1,-1,5,-1,-1,-1},
{-1,-1,-1,50,-1,-1},
{-1,-1,-1,-1,-1,10},
{-1,-1,-1,20,-1,60},
{-1,-1,-1,-1,-1,-1},

};
//找寻最小生成树
void findShortestTree(int start,int end,int n){
int[] closedge = new int
;//记录与当前树与可达的未被访问之间的权值
boolean[] arrivaled = new boolean
;//记录节点是否被访问
List list = new ArrayList();//记录最小生成树中依次添加的节点
int tempMinNode;
arrivaled[start] = true;//标记起始节点已被访问
list.add(start);//把起始节点加入最小生成树列表中
for (int i = 0; i < n; i++) {
if(!arrivaled[i])
closedge[i] = dataMap[start][i];
}

for (int i = 0; i < n; i++) {
tempMinNode = findMinNode(closedge, arrivaled);
System.out.println(tempMinNode);
if(-2 == tempMinNode || -1==closedge[tempMinNode]){
break;
}else{
arrivaled[tempMinNode] = true;
list.add(tempMinNode);
for (int j = 0; j 0){
if(closedge[j]==-1 || closedge[j]>dataMap[tempMinNode][j]){
closedge[j] = dataMap[tempMinNode][j];
}
}
}
}
}

System.out.println(list);
}
//找寻与当前生成树连接中具有最小权值的连接节点
int findMinNode(int[] closedge,boolean[] arrived){
int size = closedge.length,min=-2;
for (int i = 0; i < size; i++) {

if(!arrived[i]){
if(min==-2 && closedge[i]>0)//覆盖初始节点
min=i;
if(-2!=min && closedge[min]>0){
if(closedge[i]>0 && closedge[i]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: