题目:

代码:

package priv.tzk.lanqiao.ten;

import java.io.IOException;
import java.util.Scanner; public class Main { public static void main(String[] args) { //System.out.println("输入测量点的个数");
Scanner scN = new Scanner(System.in);
int n=scN.nextInt();//坐标个数
int d;//最大长度
int array[][] = new int[n][3];//保存输入的坐标
double [][]Graph = new double[n][n];//保存各个点之间的距离 //将坐标存入二维数组
for(int i=0;i<n;i++) {
//System.out.println("输入第"+i+"个测量点的坐标");
Scanner sc = new Scanner(System.in);
array[i][0]=sc.nextInt();
array[i][1]=sc.nextInt();
array[i][2]=sc.nextInt(); }
//System.out.println("输入两点之间最大距离");
Scanner scD = new Scanner(System.in);
d=scD.nextInt(); //求各个点之间的距离,存入二维数组中,得到图
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
double l=countLong(array[i][0],array[j][0],array[i][1],array[j][1],array[i][2],array[j][2]);
if(l<=d) {
Graph[i][j]=l;
}else {
Graph[i][j]=1000000;
}
}
} //寻找终点,高度最低
int []f=new int[n];//记录终点
double []fl=new double[n];//保存不同终点的最大路径
int min=array[0][2];
//寻找最低点,终点不唯一
for(int i=0;i<n;i++) {
if(min>array[i][2]) {
min=array[i][2];
f[i]=1;//记录最低点的位置
}
} //求两点间最大路径
for(int i=0;i<n;i++) {
if(f[i]==1) {
int vs=0;//题目已知第一个为起点
int vf=i;//终点
try {
double re=dijkstra(vs,vf,Graph);
fl[i]=re;
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
} for(int i=0;i<n;i++) {
double max=fl[0];
if(f[i]==1) {
if(max<fl[i]) {
max=fl[i];
}
}
System.out.println("最大路径为"+max);
} } /*
* 求两点距离
*/
public static double countLong(int x1,int x2,int y1,int y2,int z1,int z2) {
double count=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2);
double re=Math.sqrt(count);
return re;
} /*
* Dijkstra最短路径。
* 即图中"节点vs"到其它各个节点的最短路径。
* @param vs 起始节点
* @param Graph 图
* 将最短路径上的顶点,距离存入泛型集合list,返回
* 注意整型用Integer不能用int
*/
public static double dijkstra(int vs,int vf,double Graph[][]) throws IOException { double re=0; int NUM = Graph[0].length; int[] prenode = new int[NUM];//前驱节点数组 double[] path = new double[NUM];//最短距离数组 boolean[] flag = new boolean[NUM];// 该节点是否已经找到最短路径 int vnear = 0;//距离vs最近的节点 //初始化
for (int i = 0; i <path.length; i++) {
prenode[i] = i;
path[i] = Graph[vs][i];//顶点i的最短路径为顶点vs到i的权
flag[i] = false;
} flag[vs] = true;//vs自身初始化 //遍历 Graph.length-1次,找出每个顶点的最短路径
for (int v = 1; v < Graph.length; v++) {
double min = 100000;
for (int j = 0; j < Graph.length; j++) {
if (!flag[j] && path[j] > min) {
min = path[j];
vnear = j;
}
}
flag[vnear] = true;
for (int k = 0; k < Graph.length; k++) {
if (!flag[k] && (min + Graph[vnear][k]) > path[k]) {
prenode[k] = vnear;
path[k] = min + Graph[vnear][k];
}
}
}
//依次保存前驱,输出
for(int i=0;i<10&&prenode[vf]!=vs;i++) {//i范围根据自己表的情况
re=Graph[prenode[vf]][vf]+re;
vf=prenode[vf];
}
return re;
}
}

运行结果:

注:结果没有验证对错,如果有错,请大神评论指出

2019蓝桥杯Java第十题大学生B组——最短路径思想的更多相关文章

  1. 蓝桥杯java历年真题及答案整理1~20.md

    蓝桥杯java历年真题及答案整理(闭关一个月,呕心沥血整理出来的) 1 算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种.如:给定 A.B.C三个不同的字符,则结果为:A ...

  2. 蓝桥杯Java真题解析

    上个月参加蓝桥杯省赛拿了个省一,自从比赛完之后就一直没怎么写代码了,还有一个多月就要国赛了,从现在开始准备下国赛,但是我也不想学什么算法,而且我还在准备考研,所以就打算只做下历年的真题,争取国赛拿个国 ...

  3. Python解答蓝桥杯省赛真题之从入门到真题(二刷题目一直更新)

    蓝桥刷题 原文链接: https://github.com/libo-sober/LanQiaoCup Python解答蓝桥杯省赛真题之从入门到真题 不同字串 """ 一 ...

  4. 第四届蓝桥杯 c/c++真题

    第四届蓝桥杯 c/c++真题 <1>高斯日记 问题 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们 ...

  5. 蓝桥杯java试题《洗牌》

    问题描述 小弱T在闲暇的时候会和室友打扑克,输的人就要负责洗牌.虽然小弱T不怎么会洗牌,但是他却总是输. 渐渐地小弱T发现了一个规律:只要自己洗牌,自己就一定会输.所以小弱T认为自己洗牌不够均匀,就独 ...

  6. 记 2019蓝桥杯校内预选赛(JAVA组) 赛后总结

    引言 好像博客好久没更新了 哈哈哈哈哈 趁现在有空更新一波 不知道还有没有人看 确实该记录一下每天做了什么了 不然感觉有些浑浑噩噩了 比赛介绍 全称: 蓝桥杯全国软件和信息技术专业人才大赛 蓝桥杯 实 ...

  7. 第八届蓝桥杯java b组第六题

    标题:最大公共子串 最大公共子串长度问题就是:求两个串的所有子串中能够匹配上的最大长度是多少. 比如:"abcdkkk" 和 "baabcdadabc",可以找 ...

  8. 第三届蓝桥杯 c/c++真题

    第三届蓝桥杯真题 c/c++ 以下题目我自己也并不是所有的题目都是一次性就能做对或是有结题思路的.有些题目也是经过查证网上相关的资料或是参考了别人的代码和解题思路才做出来的.总的来看,这份题目考了很多 ...

  9. 【备考06组01号】第四届蓝桥杯JAVA组A组国赛题解

    1.填算式 (1)题目描述     请看下面的算式:     (ABCD - EFGH) * XY = 900     每个字母代表一个0~9的数字,不同字母代表不同数字,首位不能为0.     比如 ...

随机推荐

  1. 在Unity 5中优化SkinnedMeshRenderer

    过早优化是万恶之源”——Donald Knuth        不少开发者在前期开发过程中对算法等类似的开销都甚少关心,而是更倾向于尽可能简单的解决某个问题,后面必要时再进行优化.这能极大加速开发进度 ...

  2. Static and Instance Methods in JavaScript

    class.method/instance method https://abdulapopoola.com/2013/03/30/static-and-instance-methods-in-jav ...

  3. http的GET方法参数中不能传列表,接收端的key会变

    如下 async initTable() { await getHostAttributesForUser({'username': this.username}).then(response =&g ...

  4. 新版GRANAFA K8S插件 K8S NODE 图表不显示问题解决方法

    原文:https://www.wchao.site/archives/granafa-k8s 其他参考:https://blog.csdn.net/bbwangj/article/details/82 ...

  5. Java 之 自定义异常

    1.为什么需要自定义异常类 Java中不同的异常类,分别表示着某一种具体的异常情况,那么在开发中总是有些异常情况是没有定义好的,此时我们根据自己业务的异常情况来定义异常类.  一些异常都是 Java ...

  6. WPE 过滤器 滤镜 用法

    过滤所有数值匹配的数据包,并修改指定的bit位 打开游戏 打开WPE 附加游戏进程 选项配置 用来配置抓取发送和接收包类型 先抓取发送包,也就是游戏中主动发给服务器的包 点击开始抓包 输入喊话内容 分 ...

  7. Java 获取网络重定向URL(302重定向)

    方法1: import java.net.HttpURLConnection; import java.net.URL; import org.junit.Assert; import org.jun ...

  8. Linux 环境变量配置(Nodejs/MongoDB/JDK/Nginx)

    一.环境变量配置 注:配置环境变量的文件 全局变量(系统级别): /etc/bashrc /etc/profile /etc/environment 用户变量(用户级别): ~/.bash_profi ...

  9. 为什么要将action实例设置为多例

    转载自 https://zhidao.baidu.com/question/622162406833405932.html struts2中action是多例的,即一个session产生一个actio ...

  10. Dockerfile(从无到有创建镜像)

    本文原始地址:https://sitoi.cn/posts/43818.html 结构 DockerFile分为四部分组成: 基础镜像信息 维护者信息 镜像操作指令 容器启动时执行指令 基础镜像信息 ...