Java数据结构与算法《二十》最小生成树

来源:互联网 发布:易语言天龙八部源码 编辑:程序博客网 时间:2024/06/10 19:29
1.最小生成树连接每个顶点最少的连线 最小生成的树边的数量总是比顶点的数量少1
//顶点类public class Vertex{    private char label;    public boolean wasVisited;    public Vertex(){        this.label=label;    }}//图public class Graph{    //顶点数组    private Vertex[] vertexList;    //邻接矩阵    private int[][] adjMat;    //当前顶点    private int nVertex;    //栈    private MyStack stack;    public Graph(){        vertexList = new Vertex[maxSize];        adjMat = new int[maxSize][maxSize];        for(int i=0;i<maxSize;i++){            for(int i=0;j<maxSize;i++){                adjMat[i][j]=0;            }        }        nVertex =0;    }    //添加顶点    public void addVertex(char label){        vertexList[nVertex++] = new vertexList(label);    }    //添加边    public void addEdge(int start,int end){        adjMat[start][end] =1;        adjMat[end][start]=1;    }    //获取为访问到的节点    public int getadjUnvisiedVertex(int v){        for(int i=0;i<nVertex;i++){            if(adj[v][i]==1&&vertexList[i].wasVisited==true){                return i;            }        }        return -1;    }       //显示    public void displayVertex(int v){        System.out.println(vertexList[v].label);    }    public void mst(){        public void mst() {        //首先访问0号顶点        vertexList[0].wasVisited = true;        //压入栈中        stack.push(0);        while(!stack.isEmpty()) {            //当前顶点            int currentVertex = (int)stack.peek();            //获得一个未访问过的邻接点            int v = getadjUnvisitedVertex(currentVertex);            if(v == -1) {                //弹出一个顶点                stack.pop();            } else {                vertexList[v].wasVisited = true;                stack.push(v);                displayVertex(currentVertex);                System.out.print("-");                displayVertex(v);                System.out.print(" ");            }        }        //搜索完以后,要将访问信息修改        for(int i = 0; i < nVertex; i++) {            vertexList[i].wasVisited = false;        }    }    }}
0 0
原创粉丝点击