先看懂如何使用

  • 用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. centos 7 增加一块硬盘的步骤

    1) 增加一块硬盘 1G [到设置中添加一块硬盘即可] 2) 重启一下服务器 lsblk -f 查看硬盘 3) 给 sdb 硬盘分区 fdisk /dev/sdb n,p,enter,enter,w ...

  2. 不管卷不卷,面试还是得问问你G1原理!

    所有的垃圾回收器的目的都是朝着减少STW的目的而前进,G1(Garbage First)回收器的出现颠覆了之前版本CMS.Parallel等垃圾回收器的分代收集方式,从2004年Sun发布第一篇关于G ...

  3. redis学习第一天

    不同于其他的常用关系型数据库,redis是一个非常轻便,体积小,存放键值对的数据库,常用于构建高性能,可扩展的Web应用程序. 这是我第一次接触redis,之前没有使用过,只听说过.因为刚毕业,找工作 ...

  4. vivo商城促销系统架构设计与实践-概览篇

    一.前言 随着商城业务渠道不断扩展,促销玩法不断增多,原商城v2.0架构已经无法满足不断增加的活动玩法,需要进行促销系统的独立建设,与商城解耦,提供纯粹的商城营销活动玩法支撑能力. 我们将分系列来介绍 ...

  5. uniapp 打包IOS 更新AppStore版本

    Hello 你好,我是大粽子. 最近随着新版本UI的发布APP也随之更新,随之而来的也就是IOS程序提审步骤,这次我详细的截图了每一个步骤,如果你正好也需要那么跟着我的节奏一步步来肯定是没问题的. 提 ...

  6. excel函数提取内容中的汉字

    RIGHT(A2,LENB(A2)-LEN(A2)) 函数LENB将每个汉字(双字节字符)的字符数按2计数,LEN函数则对所有的字符都按1计数.因此"LENB(A2)-LEN(A2)&quo ...

  7. UI自动化学习笔记- Selenium元素等待(强制等待、显示等待、隐式等待)

    一.元素等待 1. 元素等待 1.1 什么是元素等待 概念:在定位页面元素时如果未找到,会在指定时间内一直等待的过程 意思就是:等待指定元素已被加载出来之后,我们才去定位该元素,就不会出现定位失败的现 ...

  8. 字典翻译@Dict

    1.编写翻译字典@Dict /** * 数据字典翻译注解 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) publ ...

  9. 如何使用Jdk查看源码?

    先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索[程序职场]关注这个执着的职场程序员.我有什么:职场规划指导,技能提升方法,讲不完的职场故事,个人成长经验. 最近,有很多读者问我,有没有j ...

  10. HAL库直流电机编码测速(L298N驱动)笔记

    主函数开始后的处理流程: 1.外设初始化:HAL_Init() 2.系统时钟配置 RCC振荡器初始化:HAL_RCC_OsConfig() RCC时钟初始化:HAL_RCC_ClockConfig() ...