public class Rft { private Map<Integer, List<Edge>> adjacencyList; public Rft() { this.adjacencyList = new HashMap<>(); } public void addEdge(int u, int v, double w) { Edge edge = new Edge(v, w); if (!adjacencyList.containsKey(u)) { adjacencyList.put(u, new ArrayList<>()); } adjacencyList.get(u).add(edge); } public List<Integer> getNeighbors(int node) { List<Integer> neighbors = new ArrayList<>(); if (adjacencyList.containsKey(node)) { for (Edge edge : adjacencyList.get(node)) { neighbors.add(edge.to); } } return neighbors; } public BigDecimal getWeight(int u, int v) { BigDecimal weight = BigDecimal.valueOf(0.0); if (adjacencyList.containsKey(u)) { for (Edge edge : adjacencyList.get(u)) { if (edge.to == v) { weight = BigDecimal.valueOf(edge.weight); break; } } } return weight; } private static class Edge { int to; double weight; public Edge(int to, double weight) { this.to = to; this.weight = weight; } }解释这段代码
时间: 2024-02-15 22:29:08 浏览: 60
这段代码实现了一个有向加权图的表示,其中包含了Rft类和内部静态类Edge。
Rft类有一个私有成员变量adjacencyList,它是一个Map,用于存储每个节点的邻接列表,其中每个节点对应一个键值,对应的值是一个由Edge对象组成的列表。Rft类有一个构造函数,它初始化了adjacencyList为一个空的HashMap。
Rft类有一个addEdge方法,用于向邻接列表中添加边。它接受3个参数:起始节点u,目标节点v和边的权重w。在方法内部,它创建一个新的Edge对象,该对象包含了目标节点和权重。如果邻接列表中不存在起始节点u,则创建一个新的空列表并将其与u关联。然后,它将新的Edge对象添加到u的邻接列表中。
Rft类有一个getNeighbors方法,用于获取一个节点的邻居节点列表。它接受一个参数node,表示要获取邻居节点列表的节点。在方法内部,它首先检查邻接列表中是否包含节点node。如果存在,它遍历该节点的邻接列表中的每个Edge对象,将每个对象的to属性添加到一个新的列表中,并最终返回该列表。
Rft类有一个getWeight方法,用于获取两个节点之间的边的权重。它接受两个参数u和v,表示要获取其之间边的权重的起始节点和目标节点。在方法内部,它首先检查邻接列表中是否包含起始节点u。如果存在,它遍历该节点的邻接列表中的每个Edge对象,找到目标节点等于v的对象,并取出其weight属性。最终,它将该属性转换为BigDecimal类型并返回。
Rft类还包含了一个内部静态类Edge,它表示图中的一条边。它有两个成员变量to和weight,分别表示目标节点和边的权重。它还有一个构造函数,用于初始化to和weight成员变量的值。
阅读全文