import java.util.*; public class CheapestPriceSolution { /** * 计算最便宜的机票总价钱 * @param n 表示最多总共有n个城市 * @param flights 所有航班信息,以对象数组给出,每个Flight对象表示一个航班数据(起点-终点-价格) * @param src 起点的名称 * @param dst 终点的名称 * @return 搜索一条路径可以从起点转乘一直飞到终点,并且机票总价格最小,输出最小机票价格 */ public int findCheapestPrice(int n, Flight[] flights, String src, String dst) { int ans = -1; // 删掉以下四行测试代码,并补充完整程序代码 System.out.println("所有的航班信息:"); for (Flight f: flights) System.out.println(f.getStart() + " -> " + f.getEnd() + " = ¥" + f.getPrice()); System.out.println("起点:【" + src + "】 终点:【" + dst + "】"); // 返回结果:ans表示最便宜票价(即最短路径长度) return ans; } }补充Java代码
时间: 2024-02-14 07:12:20 浏览: 91
好的,这是一个计算最便宜机票总价的Java类,下面是完整的程序代码:
```
import java.util.*;
public class CheapestPriceSolution {
/**
* 计算最便宜的机票总价钱
* @param n 表示最多总共有n个城市
* @param flights 所有航班信息,以对象数组给出,每个Flight对象表示一个航班数据(起点-终点-价格)
* @param src 起点的名称
* @param dst 终点的名称
* @return 搜索一条路径可以从起点转乘一直飞到终点,并且机票总价格最小,输出最小机票价格
*/
public int findCheapestPrice(int n, Flight[] flights, String src, String dst) {
int[][] graph = new int[n][n];
for (int i = 0; i < n; i++) {
Arrays.fill(graph[i], -1);
}
for (Flight f : flights) {
graph[f.getStart()][f.getEnd()] = f.getPrice();
}
int[] dist = new int[n];
Arrays.fill(dist, Integer.MAX_VALUE);
dist[src] = 0;
PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> dist[a] - dist[b]);
pq.offer(src);
while (!pq.isEmpty()) {
int u = pq.poll();
for (int v = 0; v < n; v++) {
if (graph[u][v] != -1 && dist[u] + graph[u][v] < dist[v]) {
dist[v] = dist[u] + graph[u][v];
pq.offer(v);
}
}
}
return dist[dst] == Integer.MAX_VALUE ? -1 : dist[dst];
}
public static void main(String[] args) {
int n = 4;
Flight[] flights = new Flight[5];
flights[0] = new Flight(0, 1, 100);
flights[1] = new Flight(1, 2, 200);
flights[2] = new Flight(0, 2, 500);
flights[3] = new Flight(2, 3, 50);
flights[4] = new Flight(0, 3, 300);
String src = "0";
String dst = "3";
CheapestPriceSolution solution = new CheapestPriceSolution();
int ans = solution.findCheapestPrice(n, flights, Integer.parseInt(src), Integer.parseInt(dst));
System.out.println("最便宜的机票总价为:" + ans);
}
}
class Flight {
private int start;
private int end;
private int price;
public Flight(int start, int end, int price) {
this.start = start;
this.end = end;
this.price = price;
}
public int getStart() {
return start;
}
public int getEnd() {
return end;
}
public int getPrice() {
return price;
}
}
```
注释已经说明了每个方法和变量的作用,main方法中给出了一个测试用例。
阅读全文