java数据结构用图实现公交路线代码
时间: 2023-07-07 13:44:53 浏览: 45
以下是使用Java实现公交路线图的代码示例:
```java
import java.util.*;
public class BusRouteGraph {
// 顶点表示公交车站
private List<String> vertices;
// 邻接表表示公交路线
private Map<String, List<BusRoute>> adjacencyList;
public BusRouteGraph() {
vertices = new ArrayList<>();
adjacencyList = new HashMap<>();
}
// 添加公交车站
public void addVertex(String vertex) {
vertices.add(vertex);
adjacencyList.put(vertex, new ArrayList<>());
}
// 添加公交路线
public void addRoute(String start, String end, int distance) {
BusRoute route = new BusRoute(end, distance);
adjacencyList.get(start).add(route);
}
// 查找公交路线
public List<BusRoute> findRoute(String start, String end) {
List<BusRoute> route = new ArrayList<>();
Set<String> visited = new HashSet<>();
visited.add(start);
dfs(start, end, visited, route);
return route;
}
// 深度优先搜索
private boolean dfs(String current, String end, Set<String> visited, List<BusRoute> route) {
if (current.equals(end)) {
return true;
}
List<BusRoute> routes = adjacencyList.get(current);
for (BusRoute r : routes) {
String next = r.getEnd();
if (visited.contains(next)) {
continue;
}
visited.add(next);
route.add(r);
if (dfs(next, end, visited, route)) {
return true;
}
route.remove(r);
visited.remove(next);
}
return false;
}
// 内部类表示公交路线
private class BusRoute {
private String end;
private int distance;
public BusRoute(String end, int distance) {
this.end = end;
this.distance = distance;
}
public String getEnd() {
return end;
}
public int getDistance() {
return distance;
}
@Override
public String toString() {
return "-> " + end + " (" + distance + "m)";
}
}
}
```
使用示例:
```java
BusRouteGraph graph = new BusRouteGraph();
graph.addVertex("A");
graph.addVertex("B");
graph.addVertex("C");
graph.addVertex("D");
graph.addRoute("A", "B", 500);
graph.addRoute("B", "C", 1000);
graph.addRoute("C", "D", 800);
graph.addRoute("A", "D", 1500);
List<BusRoute> route = graph.findRoute("A", "D");
for (BusRoute r : route) {
System.out.print(r);
}
```
输出结果为:
```
-> B (500m)-> C (1000m)-> D (800m)
```
以上代码仅供参考,实际应用中需要根据具体需求进行修改和优化。