【測繪程式設計試題集】 試題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}
相關文章
- 【測繪程式設計試題集】 試題02 矩陣卷積計算程式設計矩陣卷積
- 【測繪程式設計試題集】 試題01 計程車軌跡資料計算程式設計
- 【測繪程式設計試題集】 試題09 反距離加權插值程式設計
- 【測繪程式設計試題集】 試題06 軌跡資料壓縮演算法程式設計演算法
- 程式設計師進階之路之面試題與筆試題集錦(三)線上程式設計題程式設計師面試題筆試
- 【測繪程式設計試題集】 試題03 利用線性迴歸模型進行衛星軌道的預報程式設計模型
- 【程式設計測試題】阿里巴巴2019年提前批程式設計題程式設計阿里
- 雲端計算面試題筆試錦集,雲端計算實用面試題答案二面試題筆試
- 雲端計算面試題筆試錦集,雲端計算實用面試題答案一面試題筆試
- 雲端計算工程師面試題集錦,雲端計算面試題及答案工程師面試題
- 雲端計算面試題及答案,雲端計算工程師面試題集錦面試題工程師
- 【程式設計測試題】頭條校招程式設計
- 程式設計師進階之路之面試題與筆試題集錦(一)程式設計師面試題筆試
- 雲端計算工程師面試題集錦,常見雲端計算面試題及答案工程師面試題
- 雲端計算大資料面試題,雲端計算大資料面試題集錦大資料面試題
- 雲端計算面試題:檔案定位路徑面試題
- 程式設計師面試常問計算機網路問題程式設計師面試計算機網路
- 【程式設計測試題】遊戲任務標記程式設計遊戲
- 【程式設計測試題】素數對、不要二、求和程式設計
- 雲端計算面試題及答案,AWS雲端計算面試題面試題
- 【計題04組01號】Java面試問答題Java面試
- 面試題:web程式設計技術考試題庫(含答案)面試題Web程式設計
- 雲端計算面試題及答案,雲端計算崗位精品面試題面試題
- Linux雲端計算面試題第二彈,樂視雲端計算面試題Linux面試題
- 程式設計師50+Java面試題程式設計師Java面試題
- 智力題(程式設計師面試經典)程式設計師面試
- Java程式設計師面試題及解答Java程式設計師面試題
- JAVA程式設計師面試題庫分享Java程式設計師面試題
- 好程式設計師Linux雲端計算教程分享Shell指令碼面試題程式設計師Linux指令碼面試題
- 好程式設計師雲端計算教程分享Linux雲端計算面試常見問題一程式設計師Linux面試
- 好程式設計師雲端計算教程分享Linux雲端計算面試常見問題二程式設計師Linux面試
- 好程式設計師雲端計算教程分享Linux雲端計算面試常見問題三程式設計師Linux面試
- Floyd演算法(計算最短路徑)演算法
- 好程式設計師Java教程分享Java實習生面試題集錦程式設計師Java面試題
- 【Java面試】Java設計模式面試題!Java設計模式面試題
- 最短路徑問題
- Linux網路程式設計常見面試題Linux程式設計面試題
- VUE的面試題分享-好程式設計師Vue面試題程式設計師