公路(最小生成树)

简介: 描述岛屿国家Flatopia是完全平坦的。不幸的是,Flatopia没有公共的公路。所以Flatopia的交通很困难。Flatopian政府意识到这个问题。

描述

岛屿国家Flatopia是完全平坦的。不幸的是,Flatopia没有公共的公路。所以Flatopia的交通很困难。Flatopian政府意识到这个问题。他们正在计划修建一些高速公路,这样就可以在任何一个城镇之间行驶,而不必离开公路系统。

每个高速公路连接两个城镇。所有高速公路都沿着直线。所有高速公路都可以在两个方向上使用。高速公路可以自由交叉,但驾驶员只能在位于两条高速公路末端的小镇的高速公路之间切换。

Flatopian政府希望减少最长的高速公路的长度。但是,他们希望保证每个城镇都可以从其他城镇进入高速公路。
输入

输入的第一行是一个整数T,它告诉后面有多少个测试用例。
每种情况的第一行是一个整数N(3 <= N <= 500),这是村庄的数量。然后来N行,其中第i个包含N个整数,这N个整数中的第j个是村i和村j之间的距离(距离应该是[1 65536]内的整数)。每个测试用例后都有一个空行。
产量

对于每个测试用例,应该输出一个包含整数的行,这个长度是所有村庄连接的最长路径的长度,这个值是最小的。
示例输入

1

3
0 990 692
990 0 179
692 179 0
示例输出

692

题意:
给图的邻接矩阵,求最小生成树,输出树的最大边

题解:
用Prim算法可参考
保存每次边的权值,最后遍历一次或使用sort排序得到最大边


import java.util.Arrays;
import java.util.Scanner;


public class Test2 {
    private static final int MAX = Integer.MAX_VALUE;
    private static final int N = 505;
    private static int[][] arr = new int[N][N];
    private static int n;

    /**
     * lowcost[i]表示以i为终点的边的最小权值,
     * 当lowcost[i]=0说明以i为终点的边
     * 表示加入了树
     */
    private static int[] lowcost = new int[N];

    public static void prim() {
        int[] sum = new int[n];  //最小生成树的各个权
        int min,k = 0,s=0;
        for (int i = 1; i <= n; i++) {
            lowcost[i] = arr[1][i];    //最初顶点到别点的距离
        }
        for (int i = 1; i <= n; i++) {
            min = MAX;
            for (int j = 1; j <= n; j++) {
                if (lowcost[j]!=0 && lowcost[j] < min) {
                    min = lowcost[j];
                    k = j;
                }
            }

            sum[s] = lowcost[k];
            s++;
            lowcost[k] = 0;

            //更新lowcost
            for (int j = 1; j <= n; j++) {
                if ( lowcost[j]!=0 && arr[k][j] < lowcost[j] ) {
                    lowcost[j] = arr[k][j];
                }
            }
        }
        Arrays.sort(sum);
        System.out.println(sum[s-1]);
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        for (int t = 0; t < T; t++) {
            n = sc.nextInt(); //城镇个数
            for (int i = 1; i <= n; i++) {
                for (int j = 1; j <= n; j++) {
                    arr[i][j] = sc.nextInt();
                }
            }
            prim();
        }

    }
}
目录
相关文章
|
8月前
|
人工智能 自然语言处理 开发工具
Languine:专为开发者设计的 AI 多语言翻译工具,快速生成100+种语言的准确翻译,简化应用程序的 i18n 国际化配置
Languine 是一款面向开发者的 AI 翻译工具,支持 100+ 种语言,自动化翻译流程,提升多语言应用开发效率。
287 15
Languine:专为开发者设计的 AI 多语言翻译工具,快速生成100+种语言的准确翻译,简化应用程序的 i18n 国际化配置
|
安全 BI UED
分享一个在 WinForm 桌面程序中使用进度条展示报表处理进度的例子,提升用户体验
分享一个在 WinForm 桌面程序中使用进度条展示报表处理进度的例子,提升用户体验
125 0
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的家政服务平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的家政服务平台附带文章源码部署视频讲解等
86 1
|
存储 供应链 算法
c++关联容器详细介绍
c++关联容器详细介绍
146 0
|
Java 测试技术 数据库连接
MyBatis基本用法 && 什么是自动化测试 && Spring事务和事务传播机制 && 性能测试概念和术语 && Loadrunner安装
MyBatis基本用法 && 什么是自动化测试 && Spring事务和事务传播机制 && 性能测试概念和术语 && Loadrunner安装
157 0
|
Linux Shell 网络安全
使用Systemtap跟踪系统调用 (一)
SystemTap是一个诊断Linux系统性能或功能问题的开源软件。它使得对运行时的Linux系统进行诊断调式变得更容易、更简单。有了它,开发者或调试人员不再需要重编译、安装新内核、重启动等烦人的步骤。
764 0
使用Systemtap跟踪系统调用 (一)
|
程序员
Flutter Duration详细概述
在Flutter中,Duration 表示 持续时间,如1天,1小时,1分钟,1秒,100毫秒,100纳秒等。
海外服务器速度如何!谢谢各位阿里云大神!
求助各位大神,有谁买过阿里云海外服务器,速度怎么样?本人小白,打算购买海外服务器,不知从何下手。。另外,海外服务器在没有用户的时候该怎么测试海外的响应速度啊。谢谢各路大神帮助! 那得看什么地方的了,日本的在中国访问会比较快一些。
3002 0
|
机器学习/深度学习 自然语言处理 算法