先看懂如何使用

  • 用Java实现一个地铁票价计算程序

  • String station = "A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18 B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15";

思路:step1: 设计为A1-A18, T1,T2,B1-B15个点

  step2:35个点做为arr[35][35],将相邻的点A1-A2 ...赋值为1, T1和左右两点复制为1,

自己_自己复制为0,

不相邻值为1000(代表无穷大),A18_B1复制为1000

  step 3

//Floyd算法求解
for(int k=0; k<length; k++){
for(int i=0; i<length; i++) {
for(int j=0; j<length; j++) {
if((arr[i][k] + arr[k][j]) < arr[i][j]) {
arr[i][j] = arr[i][k] + arr[k][j];
}
}
}
}
package com.train;

import java.lang.reflect.Array;
import java.util.HashMap;
import java.util.Scanner;
import java.util.concurrent.ForkJoinPool; public class TrainDemo {
public static void main(String[] args) { String station = "A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18 B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 B14 B15";
String[] stationarr = station.split("\\s{1,}"); //length=37
HashMap<String, Integer> uniMap = new HashMap<>();
for (int i = 0; i < stationarr.length; i++) { uniMap.put(stationarr[i], i);
}
//distanceMap.put("T1")
System.out.println(uniMap.toString());
//创造一个2维数组,twoarr
// 不能访问的值为@@无穷大
//自己和自己直接为0;
// Integer[][] twoarr = new Integer[stationarr.length][stationarr.length];
for (int i = 0; i < stationarr.length; i++) {
for (int j = 0; j < stationarr.length; j++) {
if (i == j) {
twoarr[i][j] = 0;
} else {
twoarr[i][j] = 1000;
}
}
} for (int i = 0; i <stationarr.length-1 ; i++) {
twoarr[i][i+1]=1;
twoarr[i+1][i]=1;
}
//将能能到达的两点间设置为具体值
// twoarr[uniMap.get("A18").intValue()][uniMap.get("B1").intValue()]=1;
twoarr[9][9]=0;
twoarr[14][14]=0;
twoarr[9][14]=0;
twoarr[14][9]=0;
//相通
twoarr[9][24]=1;
twoarr[24][9]=1;
twoarr[9][25]=1;
twoarr[25][9]=1;
twoarr[14][29]=1;
twoarr[29][14]=1;
twoarr[14][30]=1;
twoarr[30][14]=1;
twoarr[uniMap.get("A18")][uniMap.get("B1")] = 1000;
twoarr[uniMap.get("B1")][uniMap.get("A18")] = 1000;
//t1=9 t2=14
//arr[stationMap.get("A1").intValue()][stationMap.get("A18").intValue()] = 1;
for (int k = 0; k < 35; k++) { for (int i = 0; i <stationarr.length ; i++) {
for (int j = 0; j <stationarr.length ; j++) { if(twoarr[i][k]+twoarr[k][j]<twoarr[i][j]){
twoarr[i][j] = twoarr[i][k] + twoarr[k][j];
}
}
}
}
for (int i = 0; i < 35; i++) {
for (int j = 0; j <35 ; j++) {
System.out.print(twoarr[i][j]+" ");
}
System.out.println(); }
while (true){ String s = new Scanner(System.in).nextLine();
String[] sarr= s.split("\\s{1,}");
System.out.println(twoarr[uniMap.get(sarr[0])][uniMap.get(sarr[1])]);
}
}
}

atzhang

Floyd弗洛伊德算法的更多相关文章

  1. 经典问题----最短路径(Floyd弗洛伊德算法)(HDU2066)

    问题简介: 给定T条路,S个起点,D个终点,求最短的起点到终点的距离. 思路简介: 弗洛伊德算法即先以a作为中转点,再以a.b作为中转点,直到所有的点都做过中转点,求得所有点到其他点的最短路径,Flo ...

  2. Floyd(弗洛伊德)算法(C语言)

    转载:https://blog.csdn.net/qq_35644234/article/details/60875818 Floyd算法的介绍 算法的特点 弗洛伊德算法是解决任意两点间的最短路径的一 ...

  3. Floyd算法(弗洛伊德算法)

    算法描述: Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法.从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按 ...

  4. 弗洛伊德算法(Floyd算法)

    原博来自http://www.cnblogs.com/skywang12345/ 弗洛伊德算法介绍 和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的 ...

  5. 弗洛伊德算法(Floyd )

    package com.rao.graph; /** * @author Srao * @className Floyd * @date 2019/12/11 18:43 * @package com ...

  6. 数据结构C语言版 弗洛伊德算法实现

    /* 数据结构C语言版 弗洛伊德算法  P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...

  7. [从今天开始修炼数据结构]图的最短路径 —— 迪杰斯特拉算法和弗洛伊德算法的详解与Java实现

    在网图和非网图中,最短路径的含义不同.非网图中边上没有权值,所谓的最短路径,其实就是两顶点之间经过的边数最少的路径:而对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,我们称路径上第 ...

  8. Floyd最短路径算法

    看完这篇文章写的小程序,Floyd最短路径算法,求从一个点到另一个点的最短距离,中间可以经过其他任意个点.三个for循环,从i到j依次经过k的最短距离,最外层for循环是经过点K,内部两个循环是从i( ...

  9. 弗洛伊德算法Floyed(求各顶点间最短路径):可打印最短路径

    #include <iostream> #include <string> #include <iomanip> using namespace std; #def ...

随机推荐

  1. spring + spring mvc + tomcat 面试题(史上最全)

    文章很长,而且持续更新,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三 ...

  2. 有了Java8的“+”真的可以不要StringBuilder了吗

    最近在头条上看到一篇帖子,说Java8开始,字符串拼接时,"+"会被编译成StringBuilder,所以,字符串的连接操作不用再考虑效率问题了,事实真的是这样吗?要搞明白,还是要 ...

  3. WEB安全新玩法 [1] 业务安全动态加固平台

    近年来,信息安全体系建设趋于完善,以注入攻击.跨站攻击等为代表的传统 Web 应用层攻击很大程度上得到了缓解.但是,Web 应用的业务功能日益丰富.在线交易活动愈加频繁,新的安全问题也随之呈现:基于 ...

  4. 【题解】10-19秀秀的森林(forest)

    我恨秀秀倍增LCA+离线 (时光倒流) 题目 秀秀有一棵带n个顶点的树T,每个节点有一个点权ai-.有一天,她想拥有两棵树,于是她从T中删去了一条边.第二天,她认为三棵树或许会更好一些.因此,她又从她 ...

  5. Python 机器学习实战 —— 监督学习(下)

    前言 近年来AI人工智能成为社会发展趋势,在IT行业引起一波热潮,有关机器学习.深度学习.神经网络等文章多不胜数.从智能家居.自动驾驶.无人机.智能机器人到人造卫星.安防军备,无论是国家级军事设备还是 ...

  6. c#根据名称反射对应的枚举类型

    今天遇到了要配置串口的停止位,这个时候直接反射枚举比较方便. 第一反射所有的枚举值 FieldInfo[] fieldInfoes= typeof(StopBits).GetFields(Bindin ...

  7. 生成工作区设置文件settings.json

    先Ctrl+Shift+P,然后输入setting搜索 找到工作区设置(工作区,仅在当前打开的界面下生效,文档位置与根目录/.vscode/setting.json(可自己创建,也可不创建)) 选择之 ...

  8. Android开发万能Utils(工具大全)

    AndroidUtils Android开发不得不收藏的Utils About AndroidUtilCode  是一个强大易用的安卓工具类库,它合理地封装了安卓开发中常用的函数,具有完善的 Demo ...

  9. python使用venv

    venv模块支持使用自己的站点目录创建轻量级"虚拟环境",可选择与系统站点目录隔离.每个虚拟环境都有自己的Python二进制文件(与用于创建此环境的二进制文件的版本相匹配),并且可 ...

  10. kafka高性能吞吐原因

    1. 简单回顾 Kafka作为时下最流行的开源消息系统,被广泛地应用在数据缓冲.异步通信.汇集日志.系统解耦等方面.相比较于RocketMQ等其他常见消息系统,Kafka在保障了大部分功能特性的同时, ...