最小生成树(深度)

来源:互联网 发布:iphone清理内存软件 编辑:程序博客网 时间:2024/05/16 19:51
package d20图的最小生成树;//顶点类public class Vertex {    public char label;    public boolean wasVisited;    public Vertex (char label){        this.label = label;    }}
package d20图的最小生成树;import d03栈和队列.MyStack;//图public class Graph {    //顶点数组    private Vertex[] vertexList;    //临界矩阵    private  int [] [] adjMat;    //顶点的最大数目    private int maxSize=20;    //栈    private MyStack stack;    //当前节点    private int nVertex;    public Graph(){        vertexList = new Vertex[maxSize];        adjMat = new int [maxSize][maxSize];        for(int i = 0;i<maxSize;i++){            for(int j = 0;j<maxSize;j++){                adjMat[i][j]=0;            }        }        nVertex=0;        stack = new MyStack();    }    //添加顶点    public void addVertex (char label){        vertexList[nVertex++]=new Vertex(label);    }    //添加边    public void addEdge(int start,int end){        adjMat[start][end]=1;        adjMat[end][start]=1;    }    public int getadjUnvisitedVertex(int v){        for(int i = 0;i<nVertex;i++){            if(adjMat[v][i]==1&&vertexList[i].wasVisited==false){                return i;            }        }        return -1;    }    //深度优先搜索    public void dfs(){        //首先访问0号顶点        vertexList[0].wasVisited=true;        //压入栈种        stack.push(0);        //显示该顶点        displayVertex(0);        while(!stack.isEmpty()){            //获得一个为访问过的邻接点            int v = getadjUnvisitedVertex((int)stack.peel());            if(v==-1){                //弹出一个顶点                stack.pop();            }else{                vertexList[v].wasVisited=true;                displayVertex(v);                stack.push(v);            }        }        //搜索完以后要将访问信息修改        for(int i = 0;i<nVertex;i++){            vertexList[i].wasVisited=false;        }    }    public void displayVertex(int v){        System.out.print(vertexList[v].label+" ");    }    public void mst(){        //首先访问0号顶点                vertexList[0].wasVisited=true;                //压入栈种                stack.push(0);                  while(!stack.isEmpty()){                    //获取当前顶点                    int currentVertex = stack.peel();                    //获得一个为访问过的邻接点                    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.println(" ");                    }                }                //搜索完以后要将访问信息修改                for(int i = 0;i<nVertex;i++){                    vertexList[i].wasVisited=false;                }    }}
package d20图的最小生成树;public class TestGraph {    public static void main(String[] args) {        Graph g = new Graph();        g.addVertex('A');        g.addVertex('B');        g.addVertex('C');        g.addVertex('D');        g.addVertex('E');        g.addEdge(0, 1);        g.addEdge(0, 2);        g.addEdge(0, 3);        g.addEdge(0, 4);        g.addEdge(1, 2);        g.addEdge(1, 3);        g.addEdge(1, 4);        g.addEdge(2, 3);        g.addEdge(2, 4);        g.addEdge(3, 4);        g.mst();    }}

引用块内容

原创粉丝点击