现在有n个城市,城市之间有坐火车达到,但是城市之间的铁路是有方向的,即:[1,2]表示只可以从1到达2, 给定以下城市间的铁路路线设计,请求出给定城市0到城市(n-1)之间的所有路径 示例1: 输入: [[0,1],[0,2],[1,3],[2,3]] 输出: [0,1,3], java实现 需要有测试代码
时间: 2024-01-01 13:06:14 浏览: 46
好的,我可以帮你解决这个问题。
首先,我们可以将这些城市之间的铁路路线看作是一个有向图,其中每个城市是图中的节点,每条铁路路线是图中的一条有向边。因此,我们可以使用深度优先搜索(DFS)来找出从起点城市0到终点城市(n-1)的所有路径。
以下是Java代码实现及测试代码:
```java
import java.util.*;
public class CityRailway {
private static List<List<Integer>> result = new ArrayList<>();
private static int[][] graph;
public static List<List<Integer>> getAllPaths(int[][] routes, int n) {
// 初始化邻接矩阵
graph = new int[n][n];
for (int[] route : routes) {
graph[route[0]][route[1]] = 1;
}
// DFS查找所有路径
List<Integer> path = new ArrayList<>();
path.add(0);
dfs(0, n - 1, path);
return result;
}
private static void dfs(int start, int end, List<Integer> path) {
if (start == end) {
result.add(new ArrayList<>(path));
return;
}
for (int i = 0; i < graph.length; i++) {
if (graph[start][i] == 1) {
path.add(i);
graph[start][i] = 0; // 防止走重复路径
dfs(i, end, path);
path.remove(path.size() - 1);
graph[start][i] = 1;
}
}
}
public static void main(String[] args) {
int[][] routes = {{0, 1}, {0, 2}, {1, 3}, {2, 3}};
List<List<Integer>> paths = getAllPaths(routes, 4);
for (List<Integer> path : paths) {
System.out.println(path);
}
}
}
```
输出结果为:
```
[0, 1, 3]
[0, 2, 3]
```
希望能够帮到你!
阅读全文