先看懂如何使用

  • 用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. vue给元素动态绑定样式

    <div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div> data () ...

  2. Java语言中的这些知识点有没有用过,工作中有没有入过这些坑?

    在Java语言中,有一些相对生僻的知识,平时用的机会可能不是很多,但如果不了解不掌握这些知识点的话,也可能会掉入陷阱之中,今天我们就来初步梳理一下: 1. goto是java语言中的关键字. &quo ...

  3. 【题解】Luogu P2889 [USACO07NOV]挤奶的时间Milking Time

    Luogu P2889 [USACO07NOV]挤奶的时间Milking Time 题目描述 传送门Bessie is such a hard-working cow. In fact, she is ...

  4. 复习Spring第四课---Spring对国际化的支持

    其实国际化这东西很少使用,之前也就是粗略的学了下,趁今天有空,拿出来稍微写写.以前学android开发的时候,类似于多语言的版本.差别就是一个是手机打开,一个是浏览器打开,本质是一样的. 在Sprin ...

  5. SSM动态展示分页

    这个作业属于哪个课程 2021春软件工程实践|S班(福州大学) 这个作业要求在哪里 作业具体要求 这个作业的目标 个人技术 参考文献 ... 目录 技术概述 技术详述 问题和解决过程 总结 参考文献 ...

  6. Linkerd 2.10(Step by Step)—设置服务配置文件

    Linkerd 2.10 系列 快速上手 Linkerd v2.10 Service Mesh 腾讯云 K8S 集群实战 Service Mesh-Linkerd2 & Traefik2 部署 ...

  7. UnityPlayerActivity.java使用或覆盖了已过时的 API。

    Root\Temp\gradleOut\unityLibrary\src\main\java\com\unity3d\player\UnityPlayerActivity.java使用或覆盖了已过时的 ...

  8. 分布式AKF拆分原则

    1. 前言 当我们需要分布式系统提供更强的性能时,该怎样扩展系统呢?什么时候该加机器?什么时候该重构代码?扩容时,究竟该选择哈希算法还是最小连接数算法,才能有效提升性能? 在面对 Scalabilit ...

  9. 乘风破浪,Windows11官方原装4K壁纸,前卫的艺术数字设计

    Windows11预览版官方壁纸 默认主题Windows Windows.zip 月轮主题ThemeA ThemeA.zip 艺术石主题ThemeB ThemeB.zip 日升主题ThemeC The ...

  10. 温故知新Docker概念及Docker Desktop For Windows v3.1.0安装

    Docker 简介 什么是Docker? Docker是一个开放源代码软件项目,项目主要代码在2013年开源于GitHub.它是云服务技术上的一次创新,让应用程序布署在软件容器下的工作可以自动化进行, ...