设为首页 加入收藏

TOP

Java实现Floyd统计天津地铁的站点距离(一)
2015-02-02 14:50:52 来源: 作者: 【 】 浏览:54
Tags:Java 实现 Floyd 统计 天津 地铁 站点 距离

一:说明


(1)使用floyd实现各个站点的计算记录和路径


(2)站点获取和初始距离根据外部文件得到


(3)结果以外部文件的形式存储


(4)站点间转乘,认为初始值也为1


(5)代码注释比较详细,如有疑问或者代码有,请联系我,谢谢


(6)java中二维数据的定义:


? ? a:? float[][] numthree;? ? ? ? ? ? //定义一个float类型的2维数组
numthree=new float[5][5];? ? ? //为它分配5行5列的空间大小
numthree[0][0]=1.1f;? ? ? ? ? ? //通过下标索引去访问? ? 1行1列=1.1
numthree[1][0]=1.2f;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 2行1列=1.2
? ? b: int[][] numseven=new int[][]{{10,20,30},{40,50},{60}}; //没什么好说的如果你在看不懂 那就别学了!
? ? c:? list 二维数组: List[][]lists=new ArrayList[4][4];
存放二维对象类型的list二维数组: List[][] list=new ArrayList[4][4];
存放二维数组的list:? List list=new ArrayList()


(7)数组的遍历


a:?


int arr[][] = new int[][] { { 1 }, { 1, 2 }, { 1, 2, 3 } };
?for (int i = 0; i < arr.length; i++) {
? int[] arr2 = arr[i];
? for (int c = 0; c < arr2.length; c++) {
? System.out.print(arr2[c]);
? }


b: arr[i][j]的方式


c:


java 遍历arrayList的四种方法


package com.test;


import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


public class ArrayListDemo {
? ? public static void main(String args[]){
? ? ? ? List list = new ArrayList();
? ? ? ? list.add("luojiahui");
? ? ? ? list.add("luojiafeng");


? ? ? ? //方法1
? ? ? ? Iterator it1 = list.iterator();
? ? ? ? while(it1.hasNext()){
? ? ? ? ? ? System.out.println(it1.next());
? ? ? ? }


? ? ? ? //方法2
? ? ? ? for(Iterator it2 = list.iterator();it2.hasNext();){
? ? ? ? ? ? System.out.println(it2.next());
? ? ? ? }


? ? ? ? //方法3
? ? ? ? for(String tmp:list){
? ? ? ? ? ? System.out.println(tmp);
? ? ? ? }


? ? ? ? //方法4
? ? ? ? for(int i = 0;i < list.size(); i ++){
? ? ? ? ? ? System.out.println(list.get(i));
? ? ? ? }


? ? }
}


二:完整代码如下


package edu.tju.cs;


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class MetroFloyd {
?
?private? final int MAX_SIZE = 92;// 86+1 + 5个未开通的 数组的空间,可以再大一些
?private int k = 0;
?private int Vertex = 0;// 站点个数,通过读取每一条记录得到
?private int[] Line = new int[MAX_SIZE];// 和path一起记录路径的
?private int[][] Path = new int[MAX_SIZE][MAX_SIZE];// 记录路径
?private int[][] Dist = new int[MAX_SIZE][MAX_SIZE];//记录各个站点间距离的
?private List stationID =? new ArrayList();//得到站点编号
?private Map mapIDName = new HashMap();// 站点编号和名称的对应关系
?
?/* 功能:读取外部文件,把站点编号 放到stationID数组中,站点编号和名称的对应关系mapIDName,以及Vertex统计
? * @param: originalPath 读文件件的路径名称
? * @调用其他函数: null
? * @return: null
? */
?// // 2305,刘园,117.123174,39.214493
?public void readText(String originalPath){
? try {
? ?Vertex = 0;
? ?String regex = ",";// 分割依赖符号,\\
? ? ? ? ? ? String encoding="GBK";
? ? ? ? ? ? File file=new File(originalPath);
? ? ? ? ? ? if(file.isFile() && file.exists()){ //判断文件是否存在
? ? ? ? ? ? ? ? InputStreamReader read = new InputStreamReader(
? ? ? ? ? ? ? ? new FileInputStream(file),encoding);//考虑到编码格式
? ? ? ? ? ? ? ? BufferedReader bufferedReader = new BufferedReader(read);
? ? ? ? ? ? ?// 原始一行数据和数据是否需要改变的符号
? ? ? ? ? ? ? ? String originalLine = null;
? ? ? ? ? ? ? ? originalLine = bufferedReader.readLine();// 第一行列标示符过滤掉
? ? ? ? ? ? ? ? if(originalLine == null){
? ? ? ? ? ? ? ? ? read.close();
? ? ? ? ? ? ? ? ? ? bufferedReader.close();
? ? ? ? ? ? ? ? ?return;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? stationID.add(0); // 无效值,因为是从站点编号是从1开始的
? ? ? ? ? ? ? ? while((originalLine = bufferedReader.readLine()) != null){? ? ? ?
? ? ? ? ? ? ? ? ?// 字符串分隔
? ? ? ? ? ? ? ? ?String tmp[] = originalLine.split(regex);
? ? ? ? ? ? ? ? ?// 如果符合重新合成
? ? ? ? ? ? ? ? ?stationID.add(Integer.parseInt(tmp[0]));
? ? ? ? ? ? ? ? ?mapIDName.put(Integer.parseInt(tmp[0]), tmp[1]

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言字符串操作函数总结 下一篇AngularJS Node.JS Grunt 一个例子

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: