用java语言实现地铁最短距离
时间: 2024-06-11 17:10:18 浏览: 93
用java写的查询某市地铁的最短路径。递归算法
这是一个典型的最短路径问题,可以使用Dijkstra算法或Floyd算法来解决。
以下是使用Dijkstra算法实现地铁最短距离的示例代码:
```
import java.util.*;
public class SubwayShortestDistance {
private static final int INF = Integer.MAX_VALUE; // 无穷大
public static void main(String[] args) {
int[][] graph = { // 地铁站之间的距离
{0, 2, INF, INF, INF, INF},
{2, 0, 3, INF, INF, INF},
{INF, 3, 0, 4, INF, INF},
{INF, INF, 4, 0, 5, INF},
{INF, INF, INF, 5, 0, 6},
{INF, INF, INF, INF, 6, 0}
};
int start = 0; // 起点
int end = 5; // 终点
int[] distance = dijkstra(graph, start); // 计算最短距离
System.out.println("从" + start + "站到" + end + "站的最短距离为:" + distance[end]);
}
/**
* Dijkstra算法计算最短路径
*
* @param graph 图的邻接矩阵
* @param start 起点
* @return 起点到各个顶点的最短距离
*/
public static int[] dijkstra(int[][] graph, int start) {
int n = graph.length;
int[] distance = new int[n]; // 起点到各个顶点的最短距离
boolean[] visited = new boolean[n]; // 标记是否已经访问过
// 初始化
Arrays.fill(distance, INF);
distance[start] = 0;
// 重复n次
for (int i = 0; i < n; i++) {
int minDistance = INF;
int minVertex = -1;
// 找到未访问的距离起点最近的顶点
for (int j = 0; j < n; j++) {
if (!visited[j] && distance[j] < minDistance) {
minDistance = distance[j];
minVertex = j;
}
}
if (minVertex == -1) break; // 所有顶点都已经访问过
visited[minVertex] = true; // 标记为已访问
// 更新与当前顶点相邻的顶点的距离
for (int j = 0; j < n; j++) {
if (graph[minVertex][j] != INF) {
distance[j] = Math.min(distance[j], distance[minVertex] + graph[minVertex][j]);
}
}
}
return distance;
}
}
```
在上面的代码中,我们使用了一个邻接矩阵来表示地铁站之间的距离,其中INF表示不连通。然后使用Dijkstra算法计算起点到各个顶点的最短距离,最后输出从起点到终点的最短距离。在这个示例中,起点为0号站,终点为5号站,输出结果为:
```
从0站到5站的最短距离为:11
```
这表示从0号站到5号站的最短距离为11。
阅读全文