• JAVAPrim最小生成树


    题目描述

    使用Prim算法求图的最小生成树(MST)

    输入

    每组数据分为两个部分,第一部分为图的点数n,和边数m,
    第二部分为m行,每一行输入三个数字,前两个为两个顶点的编号,第三个为边权重。

    输出

    最小生成树,输出时按照边的两个端点的升序输出。(先看左端点,再看右端点,端点不换位置)

    样例输入 Copy

    3 3
    0 1 10
    0 2 15
    1 2 50

    样例输出 Copy

    0 1 10
    0 2 15

    package book;
    
    import java.util.Scanner;
    
    public class Prim {
    static int m,n;
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Scanner sc=new Scanner(System.in);
    		 n=sc.nextInt();
    		 m=sc.nextInt();
    		int map[][]=new int[m][m];
    		for(int i=0;i<m;i++) {
    			for(int j=0;j<m;j++) {
    				map[i][j]=Integer.MAX_VALUE;
    			}
    		}
    		for(int i=0;i<m;i++) {
    			int start=sc.nextInt();
    			int end=sc.nextInt();
    			int length=sc.nextInt();
    			map[start][end]=length;
    			map[end][start]=length;
    		}
    		slove(map);
    
    	}
    	private static void slove(int[][] map) {
    		int used[]=new int[n];
    		int closet[]=new int[n];
    		int lowcost[]=new int[n];
    	    for(int i=1;i<n;i++) {
    			lowcost[i]=map[0][i];
    			closet[i]=0;//初始化
    			used[i]=0;
    		}
    		used[0]=1;
    		for(int i=1;i<n;i++) {
    			int j=0;
    			int min=Integer.MAX_VALUE;
    			for(int k=1;k<n;k++) {
    				if(lowcost[k]<min&&used[k]==0) {
    					min=lowcost[k];
    					j=k;
    				}
    			}
    			if(closet[j]<j) {
    				System.out.println(closet[j]+" "+j+" "+map[closet[j]][j]);
    				}
    				else {
    				System.out.println(j+" "+closet[j]+" "+map[closet[j]][j]);
    				}
    			used[j]=1;
    			 for(int k=1;k<n;k++) {
    				  if(map[j][k]<lowcost[k]&&used[k]==0) {
    					  lowcost[k]=map[j][k];
    					  closet[k]=j;
    				  }
    			  }
    		}
    		
    		for(int j=1;j<n;j++) {
    			System.out.print(lowcost[j]+" ");
    		}
    		
    		
    	}
    
    }
  • 相关阅读:
    11月1号笔试题总结
    10月30笔试题总结
    web前端常用单词
    9月13日·碎碎念
    python 匿名函数
    python 二分法查找
    python 递归
    python内置函数
    python 列表生成式
    python 生成器
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309578.html
Copyright © 2020-2023  润新知