【測繪程式設計試題集】 試題04 最短路徑計算
資料
武大,地大,6
武大,光谷,11
武大,圖書城,24
地大,光谷,4
地大,華科,8
光谷,地大,5
光谷,圖書城,9
光谷,華科,7
圖書城,光谷,11
華科,光谷,9
問題
解
- Edge
package com.te.sortPath;
/**
* <p>Title : Edge </p>
* <p>Description : 起點 , 終點 , 長度</p>
*
* @author huifer
* @date 2018/11/08
*/
public class Edge {
/**
* 起點
*/
public String start;
/***
* 終點
*/
public String end;
/***
* 距離
*/
public double length;
public Edge(String line) {
String[] split = line.split(",");
start = split[0];
end = split[1];
length = Double.parseDouble(split[2]);
}
@Override
public String toString() {
return "Edge{" +
"start='" + start + '\'' +
", end='" + end + '\'' +
", length=" + length +
'}';
}
}
- Vertex
package com.te.sortPath;
import java.util.Objects;
/**
* <p>Title : Vertex </p>
* <p>Description : 頂點</p>
*
* @author huifer
* @date 2018/11/08
*/
public class Vertex {
public String name;
public double weight =100000;
public Vertex(String new_name) {
this.name = new_name;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Vertex vertex = (Vertex) o;
return Double.compare(vertex.weight, weight) == 0 &&
Objects.equals(name, vertex.name);
}
@Override
public int hashCode() {
return Objects.hash(name, weight);
}
@Override
public String toString() {
return "Vertex{" +
"name='" + name + '\'' +
", weight=" + weight +
'}';
}
}
- Graph
package com.te.sortPath;
import java.util.ArrayList;
import java.util.List;
/**
* <p>Title : Graph </p>
* <p>Description : 圖</p>
*
* @author huifer
* @date 2018/11/08
*/
public class Graph {
public List<Edge> edges;
public List<Vertex> vertices;
public Graph(List<Edge> edges) {
this.edges = edges;
parse(edges);
}
@Override
public String toString() {
return "Graph{" +
"edges=" + edges +
", vertices=" + vertices +
'}';
}
private void parse(List<Edge> edgeList) {
List<Vertex> aaa = new ArrayList<>();
for (Edge d : edgeList) {
Vertex v = new Vertex(d.start);
if (!aaa.contains(v)) {
aaa.add(v);
}
v = new Vertex(d.end);
if (!aaa.contains(v)) {
aaa.add(v);
}
}
vertices = aaa;
}
}
- run
package com.te.sortPath;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
/**
* <p>Title : RunT </p>
* <p>Description : todo</p>
*
* @author huifer
* @date 2018/11/08
*/
public class RunT {
public static void main(String[] args) throws Exception {
/////////////// 讀檔案
List<Edge> edges = new ArrayList<>();
String pathname = "E:\\idea_project\\cloud\\src\\main\\java\\com\\te\\sortPath\\路徑資料.txt";
FileReader reader = new FileReader(pathname);
BufferedReader br = new BufferedReader(reader);
String line;
while ((line = br.readLine()) != null) {
edges.add(new Edge(line));
}
Graph graph = new Graph(edges);
///////////////
List<Vertex> res = graph.vertices;
int n = res.size();
res.get(0).weight = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
List<Vertex> rlux = new ArrayList<>();
for (Edge e : graph.edges) {
if (e.start.equals(res.get(i).name) && e.end.equals(res.get(j).name)) {
double w = res.get(i).weight + e.length;
// System.out.println(String.format("當前點 %s - 連線點 %s", res.get(i).name,
// res.get(j).name));
rlux.add(res.get(i));
rlux.add(res.get(j));
if (w < res.get(j).weight) {
res.get(j).weight = w;
// System.out.println(String.format("當前點 %s - 連線點 %s", res.get(i).name,
// res.get(j).name));
rlux.remove(rlux.size() - 1);
rlux.add(res.get(j));
}
}
}
System.out.println(rlux);
}
}
res.forEach(
s -> {
System.out.println(s);
}
);
}
}
結果
Vertex{name='武大', weight=0.0}
Vertex{name='地大', weight=6.0}
Vertex{name='武大', weight=100000.0}
Vertex{name='光谷', weight=10.0}
Vertex{name='圖書城', weight=19.0}
Vertex{name='華科', weight=14.0}
相關文章
- 【測繪程式設計試題集】 試題01 計程車軌跡資料計算程式設計
- 【測繪程式設計試題集】 試題02 矩陣卷積計算程式設計矩陣卷積
- 【測繪程式設計試題集】 試題09 反距離加權插值程式設計
- 【測繪程式設計試題集】 試題06 軌跡資料壓縮演算法程式設計演算法
- 【測繪程式設計試題集】 試題03 利用線性迴歸模型進行衛星軌道的預報程式設計模型
- 筆試題目——程式設計題筆試程式設計
- 【程式設計測試題】頭條校招程式設計
- 程式設計師進階之路之面試題與筆試題集錦(三)線上程式設計題程式設計師面試題筆試
- 【程式設計測試題】遊戲任務標記程式設計遊戲
- 雲端計算面試題筆試錦集,雲端計算實用面試題答案二面試題筆試
- 雲端計算面試題筆試錦集,雲端計算實用面試題答案一面試題筆試
- 【程式設計測試題】素數對、不要二、求和程式設計
- 【程式設計測試題】阿里巴巴2019年提前批程式設計題程式設計阿里
- 程式設計師進階之路之面試題與筆試題集錦(一)程式設計師面試題筆試
- Floyd演算法(計算最短路徑)演算法
- 有關介面測試的用例設計問題
- 如何設計一個流計算基準測試?
- Java程式設計師的筆試題10道Java程式設計師筆試
- 面試題:web程式設計技術考試題庫(含答案)面試題Web程式設計
- 最短路徑問題
- CCUT程式設計能力測試---前言程式設計
- My複利計算程式測試報告測試報告
- 測試平臺系列(73) 設計測試計劃功能
- QTP測試Windows計算器QTWindows
- 歷年軟體設計師考試試題分析
- 全職爸爸,是程式設計師的加試題程式設計師
- 程式設計師C語言經典筆試題程式設計師C語言筆試
- C++多執行緒筆試程式設計題C++執行緒筆試程式設計
- 中軟國際Java程式設計師筆試題Java程式設計師筆試
- 測試面試題集錦(五)| 自動化測試與效能測試篇(附答案)面試題
- 計算機組成原理期末考試題計算機
- GRE計算機專項考試題(96) (轉)計算機
- GRE計算機專項考試題(98) (轉)計算機
- 程式設計藝術家經典試題解讀:猜生日問題程式設計
- 軟體測試設計
- Python期中考試程式設計題詳解-2Python程式設計
- Tars | 第7篇 TarsJava Subset最終程式碼的測試方案設計Java
- 效能測試混合場景計算