700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 普利姆算法解决最小生成树问题

普利姆算法解决最小生成树问题

时间:2022-08-12 17:46:46

相关推荐

普利姆算法解决最小生成树问题

普利姆算法就是从第一个顶点出发,每次都选择已访问节点的最短相邻节点,最后将所有节点都访问,代码:

/*** 普利姆算法解决最小生成树问题*/public class PrimAlgorithm {public static void main(String[] args) {char[] data = {'A','B','C','D','E','F','G'};int verx = data.length;//二维数组表示邻接矩阵,10000表示两点不连通int[][] weight = {{10000,5,7,10000,10000,10000,2},{5,10000,10000,9,10000,10000,3},{7,10000,10000,10000,8,10000,10000},{10000,9,10000,10000,10000,4,10000},{10000,10000,8,10000,10000,5,4},{10000,10000,10000,4,5,10000,6},{2,3,10000,10000,4,6,10000}};MGraph mGraph = new MGraph(verx);MinTree minTree = new MinTree();minTree.createMGraph(mGraph,verx,data,weight);minTree.printMGraph(mGraph);//测试普利姆算法minTree.createMinTree(mGraph,0);}}//最小生成树class MinTree{/*** 生成图的方法* @param mGraph 图对象* @param verx 图顶点个数* @param data 顶点数据* @param weight 图的邻接矩阵*/public void createMGraph(MGraph mGraph,int verx,char[] data,int[][] weight){for(int i = 0;i<verx;i++){mGraph.data[i] = data[i];for(int j = 0;j<verx;j++){mGraph.weight[i][j] = weight[i][j];}}}//输出图的邻接矩阵的方法public void printMGraph(MGraph mGraph){for(int[] link:mGraph.weight){System.out.println(Arrays.toString(link));}}/*** 生成最小生成树* @param mGraph 图对象* @param v 表示从哪个顶点开始*/public void createMinTree(MGraph mGraph,int v){//记录已经被访问过的顶点,默认为0,还没访问int[] visited = new int[mGraph.verx];//记录两个被连接的顶点int h1 = -1;int h2 = -1;int min = 10000;//记录每次遍历时,最短路径,初始值为10000//初始顶点设置为已访问visited[v] = 1;for(int k = 1;k<mGraph.verx;k++){//表示verx个顶点 需要 verx-1条边,所以循环verx-1次//遍历所有顶点for(int i = 0;i<mGraph.verx;i++){for(int j = 0;j<mGraph.verx;j++){//表示筛选出已经访问过的节点 的未访问的邻节点,并且边最小的两个顶点if(visited[i] == 1 && visited[j] == 0 && mGraph.weight[i][j]<min){min = mGraph.weight[i][j];h1 = i;h2 = j;}}}//找到一条边是最小的System.out.println("边<"+mGraph.data[h1]+","+mGraph.data[h2]+">:权值"+min);//将h1,h2设置为已访问visited[h2] = 1;//重置minmin = 10000;}}}//图class MGraph{int verx;//表示图节点的个数char[] data;//存放节点int[][] weight;//存放边,就是邻接矩阵public MGraph(int verx) {this.verx = verx;data = new char[verx];weight = new int[verx][verx];}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。