先看懂如何使用

  • 用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. 如何让vscode C++ 终端不再显示调试启动信息

    按照微软的官方文档(https://go.microsoft.com/fwlink/?LinkID=533484#vscode)配置好C++环境之后. 每次按F5都会在终端输出,但是会附加一串信息.例 ...

  2. Spring Boot WebFlux-08——WebFlux 中 WebSocket 实现通信

    第08课:WebFlux 中 WebSocket 实现通信 前言 WebFlux 该模块中包含了对反应式 HTTP.服务器推送事件和 WebSocket 的客户端和服务器端的支持.这里我们简单实践下 ...

  3. sqlsever 创建一个通用分页查询

    -- Author: Mis Chen-- Create date: 2018年5月15日 11:21:47-- Description: 创建一个通用分页查询-- ================= ...

  4. react 的优点

    1. 声明式开发 react 是声明式的开发方式,与之对应的是命令式开发方式.之前用jquery写代码的时候,我们都是直接操作dom,这种我们称为命令式的编程.命令式编程需要我们一点点的告诉dom,它 ...

  5. 富文本编辑器之游戏角色升级ing

    一.前言 想必大家看到这个标题,心中不禁会浮现几个问题: 什么是富文本编辑器? 富文本编辑器和游戏角色有什么关系? 为什么是升级ing? 什么是富文本编辑器--富文本编辑器集成了格式设置.媒体嵌入.社 ...

  6. 利用C语言识别用户输入字符并且输出该字符ASCII码值(大小写字母篇)(含思路)

    要求:从键盘输入一个字符,如果输入字符的是小写英文字母,则将其转换为大写英文字母,然后将转换后的英文字母及其ASCII码值输出到屏幕上,如果输入的是其他字符,则不转换并且直接将它及其ASCII码值输出 ...

  7. Tiling 简单递推+大数

    Tiling c[0]=1,c[1]=1,c[2]=3;   c[n]=c[n-1]+c[n-2]*2;   0<=n<=250.   大数加法 java  time  :313ms 1 ...

  8. 1.3.5、通过Method匹配

    server: port: 8080 spring: application: name: gateway cloud: gateway: routes: - id: guo-system4 uri: ...

  9. MySQL 卡死的问题

    1. 执行show full processlist观察state和info两列,查看有哪些线程在运行. 2.使用kill命令+对应线程前面id杀死卡死的线程. 其他的方式: -- 查询是否锁表 sh ...

  10. 探索互斥锁 Mutex 实现原理

    Mutex 互斥锁 概要描述 mutex 是 go 提供的同步原语.用于多个协程之间的同步协作.在大多数底层框架代码中都会用到这个锁. mutex 总过有三个状态 mutexLocked: 表示占有锁 ...